目录
之前有写qtpropertybrowser 的用法,现在可以通过属性列表来修改属性值改变控件的特性。
控件的自定义属性显示在属性控件上
在自定义的控件中添加user 属性
variantEditor = new QtTreePropertyBrowser();
pVarManager = new QtVariantPropertyManager(variantEditor);
m_pVarFactory = new QtVariantEditorFactory(variantEditor);
connect(pVarManager,&QtVariantPropertyManager::valueChanged,this, &MainWindow::onValueChanged);
variantEditor->setFactoryForManager(pVarManager, m_pVarFactory);
Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue USER true)
Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue USER true)
Q_PROPERTY(double value READ getValue WRITE setValue USER true)
Q_PROPERTY(double alarmValue READ getAlarmValue WRITE setAlarmValue USER true)
Q_PROPERTY(bool animation READ getAnimation WRITE setAnimation USER true)
Q_PROPERTY(double animationStep READ getAnimationStep WRITE setAnimationStep USER true)
Q_PROPERTY(int borderWidth READ getBorderWidth WRITE setBorderWidth USER true)
Q_PROPERTY(int borderRadius READ getBorderRadius WRITE setBorderRadius USER true)
Q_PROPERTY(int bgRadius READ getBgRadius WRITE setBgRadius USER true)
Q_PROPERTY(int headRadius READ getHeadRadius WRITE setHeadRadius USER true)
Q_PROPERTY(QColor borderColorStart READ getBorderColorStart WRITE setBorderColorStart USER true)
Q_PROPERTY(QColor borderColorEnd READ getBorderColorEnd WRITE setBorderColorEnd USER true)
Q_PROPERTY(QColor alarmColorStart READ getAlarmColorStart WRITE setAlarmColorStart USER true)
Q_PROPERTY(QColor alarmColorEnd READ getAlarmColorEnd WRITE setAlarmColorEnd USER true)
Q_PROPERTY(QColor normalColorStart READ getNormalColorStart WRITE setNormalColorStart USER true)
Q_PROPERTY(QColor normalColorEnd READ getNormalColorEnd WRITE setNormalColorEnd USER true)
USER true ,后续可以作为判断部分。
pPlug = new Battery(this);
connect(pPlug,SIGNAL(clicked(bool)), this, SLOT(slotWidgetClicked()));
传递和显示属性值到qtpropertybrowser 的控件上
void QNewPageTable::slotWidgetClicked()
{
QMetaObject meta = pPlug->staticMetaObject;
emit showObjectProperty(meta,pPlug);
}
void MainWindow::slotshowObjectProperty(QMetaObject meta,QObject *sender )
{
pVarManager->clear();
variantEditor->clear();
if(sender==nullptr)
return;
for (int i = 0; i < meta.propertyCount(); ++i) {
QMetaProperty property = meta.property(i);
if(property.isUser())
{
QtVariantProperty *item = pVarManager->addProperty(property.type(), tr(property.name()));
item->setValue(property.read(sender));
variantEditor->addProperty(item);
}
}
}
修改属性控件改变控件的特性
如前面所示想讲属性列表的valueChanged 信号和处理的slot 绑定
connect(pVarManager,&QtVariantPropertyManager::valueChanged,this, &MainWindow::onValueChanged);
slot 来处理相关的属性值修改
void MainWindow::onValueChanged(QtProperty *property, const QVariant &value)
{
qDebug()<<property->propertyName().toLatin1()<<":"<<value;
pageList[0]->UpdateValue(property,value);
}
void QNewPageTable::UpdateValue( QtProperty *property, const QVariant &value)
{
qDebug()<<property->propertyName().toLatin1()<<":"<<value;
pPlug->setProperty(property->propertyName().toLocal8Bit().constData(),value);
}
2023-09-15 14-11-41