需要做一个属性列表框,首先想到的就是QTableWidget来实现,但是总是感觉没有达到想象中属性列表框那么好看。
像这样的效果,而且后面的value值是根据需求可变的,如下:
这个QT中就没有现成的类来实现啦,找了好久终于找到了相关的开源代码实现。
这几个类为:
管理类:
QtBoolPropertyManager
QtIntPropertyManager
QtStringPropertyManager
QtSizePropertyManager
QtRectPropertyManager
QtSizePolicyPropertyManager
QtEnumPropertyManager
QtGroupPropertyManager
模式类:
QtCheckBoxFactory
QtSpinBoxFactory
QtSliderFactory
QtScrollBarFactory
QtLineEditFactory
QtEnumEditorFactory
下面是我实现的图像:
代码:
NetworkSettingPropertyManager = new QtStringPropertyManager();
DHCPEnumManager = new QtEnumPropertyManager();
QtGroupPropertyManager *groupManager = new QtGroupPropertyManager();
QtProperty *item0 = groupManager->addProperty(QString::fromUtf8("Network Setting"));
DHCPTypeProperty = DHCPEnumManager->addProperty(QString::fromUtf8("DHCP Type"));
item0->addSubProperty(DHCPTypeProperty);
QStringList tempStrList;
tempStrList << QString::fromUtf8("Automatic") << QString::fromUtf8("Manual");
DHCPEnumManager->setEnumNames(DHCPTypeProperty,tempStrList);
IPAddrProperty = NetworkSettingPropertyManager->addProperty(QString::fromUtf8("IP address"));
item0->addSubProperty(IPAddrProperty);
subnetMaskProperty = NetworkSettingPropertyManager->addProperty(QString::fromUtf8("Subnet Mask"));
item0->addSubProperty(subnetMaskProperty);
defaultGatewayProperty = NetworkSettingPropertyManager->addProperty(QString::fromUtf8("Default Gateway"));
item0->addSubProperty(defaultGatewayProperty);
QtEnumEditorFactory *comboBoxFactory = new QtEnumEditorFactory();
QtLineEditFactory *lineEditFactory = new QtLineEditFactory();
QtAbstractPropertyBrowser *editor1 = new QtTreePropertyBrowser();
editor1->setFactoryForManager(DHCPEnumManager, comboBoxFactory);
editor1->setFactoryForManager(NetworkSettingPropertyManager, lineEditFactory);
editor1->setFactoryForManager(NetworkSettingPropertyManager, lineEditFactory);
editor1->setFactoryForManager(NetworkSettingPropertyManager, lineEditFactory);
editor1->addProperty(item0);
editor1->setMinimumHeight(150);
用这个做出的效果确实比QTableWidget做出来的好多啦。
这个也使我明白了一点,如果想做的界面更美更好,只有按照自己的需求来实现自己的控件,不过我还没有达到那个境界,慢慢的积累会有那么一天的。