写一个qt组件互斥函数

在遇到更换图片后,明明图片的背景是transparent(透明),可是图片确实有颜色的,这时候要考虑到代码背景的问题

void CVDISettingDialog::initNetSetRatioWidgets(const QString& address) {
  m_pDynamicNetInd = CREATE_IND_RATIO_LABEL(STR_DYNAMICNET_IND);
  m_pStaticNetInd = CREATE_IND_RATIO_LABEL(STR_STATICNET_IND);
  m_pNetRatioGroup = new CCSWRatioGroupWidget(m_pContent); //动态IP地址和静态IP地址的互斥组件(NetRatio Group网络组件)
  CCSWRatioGroupWidget* pRatioGroup =
  dynamic_cast<CCSWRatioGroupWidget*>(m_pNetRatioGroup);
  m_isDynamicIP = !address.isEmpty();
  pRatioGroup->addWidget(
  new CCSWRatioWidget(NULL,
  QSize(SIZE_IND_RATIO.height(), SIZE_IND_RATIO.height()),
  STR_IPALLOC_DYNAMIC, m_isDynamicIP));
  pRatioGroup->addWidget(
  new CCSWRatioWidget(NULL,
  QSize(SIZE_IND_RATIO.height(), SIZE_IND_RATIO.height()),
  STR_IPALLOC_STATIC, !m_isDynamicIP));
  connect(pRatioGroup, SIGNAL(checked(const QString&, bool)), this, SLOT(ipAllocationTypeChanged(const QString&, bool)));
}

动态IP地址和静态IP地址放在一起,利用上文中的m_pNetRatioGroup进行结合

下面是程序代码:

/*
* CCSWRatioGroupWidget.cpp
*
*/

#include "CCSWRatioGroupWidget.h"
#include "util_ui.h"


/*static const QString STR_STYLE_BG("QLabel{border-image: none; background-color: white;}");*/
static const QString STR_STYLE_BG("QLabel{border-image: none; background-color: transparent;}"); //动态IP和静态IP地址的互斥组件颜色背景

 

CCSWRatioGroupWidget::CCSWRatioGroupWidget(QWidget *pParent) \
:QLabel(pParent), m_pWidgetChecked(NULL), m_AllWidgetSize(0, 0), m_nextWidgetPos(0, 0){
  setStyleSheet(STR_STYLE_BG);
  resize(m_AllWidgetSize);
}

void CCSWRatioGroupWidget::reLarger(CCSWRatioWidget* pWidget) {
  if (m_AllWidgetSize.width() < pWidget->width()) {
    m_AllWidgetSize.setWidth(pWidget->width());
  }
  m_AllWidgetSize.setHeight(m_AllWidgetSize.height() + pWidget->height());
  resize(m_AllWidgetSize);
}

void CCSWRatioGroupWidget::placeWidget(CCSWRatioWidget* pWidget) {
  pWidget->move(m_nextWidgetPos);
  m_nextWidgetPos = pWidget->geometry().bottomLeft();
  m_WidgetMap[pWidget->ratioObjName()] = pWidget;
  connect(pWidget, SIGNAL(checked(const QString&, bool)), this, SLOT(on_checked(const QString&, bool)));
}

void CCSWRatioGroupWidget::addWidget(CCSWRatioWidget *pWidget)
{
  pWidget->setParent(this);
  reLarger(pWidget);
  placeWidget(pWidget);
  if(pWidget->isChecked()){
    m_pWidgetChecked = m_WidgetMap[pWidget->ratioObjName()];
    emit checked(pWidget->ratioObjName(), true);
  }
}

void CCSWRatioGroupWidget::on_checked(const QString &objname, bool state)
{
  if(m_pWidgetChecked != NULL)
  {
    m_pWidgetChecked->setChecked(false);
  }
  m_pWidgetChecked = m_WidgetMap[objname];
  emit checked(objname, state);
}

CCSWRatioGroupWidget::~CCSWRatioGroupWidget() {

}

 

posted @ 2019-07-29 18:07  秦沐  阅读(320)  评论(0)    收藏  举报