QT 自定义控件和qtpropertybrowser 之间互动

本文介绍了如何在Qt应用中使用QtPropertyBrowser展示和修改控件的自定义属性,包括添加user属性、设置工厂、监听valueChanged信号以及处理属性值的变化。
摘要由CSDN通过智能技术生成

目录

控件的自定义属性显示在属性控件上

修改属性控件改变控件的特性


之前有写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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值