写一个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() {
}

浙公网安备 33010602011771号