• 1598阅读
  • 1回复

C++中读写qml对象的属性UI显示不更新问题 [复制链接]

上一主题 下一主题
离线971586331
 

只看楼主 倒序阅读 楼主  发表于: 2021-01-14
各位大佬,C++读写qml属性问题已经困扰我几天了,我按官网上的方法(https://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html),用QQmlComponent创建对像,用findChild查找到对象后,用setProperty设置属性的值,如设置Label的text,qml文件中Label的onTextChanged已经触发了,打印text也已经改变了,但ui的显示不更新是什么原因呢?如果我在C++中读Label的text值一直读到的是初始值,text改变了读到的值不会变。这是什么原因啊
如果我想在C++中设置或获得一个Label控件的text值,该怎么做呢。
  1. mainwindow::mainwindow(QObject *parent) : QObject(parent)
  2. {
  3.     QQmlEngine *page2_engine = new QQmlEngine;
  4.     QQmlComponent *component = new QQmlComponent(page2_engine, "qrc:/Page2Form.ui.qml");
  5.     page2_obj = component->create();
  6.     led_obj = page2_obj->findChild<QObject*>("led");
  7.     data_2_obj = page2_obj->findChild<QObject*>("data_2");
  8.     warm1_obj = page2_obj->findChild<QObject*>("warm1");
  9. }
  10. void mainwindow::button_test()
  11. {
  12.     static int index = 0;
  13.     qDebug("button_test()");
  14.     warm1_obj->setProperty("text", index);
  15.         index ++;
  16. }

  1. Label {
  2.                 id: lable1
  3.                 objectName: "warm1"
  4.                 text: qsTr("预热状态:")
  5.                 onTextChanged: {
  6.                     console.log("text = ", text)
  7.                 }
  8.             }


离线shanquan

只看该作者 1楼 发表于: 2021-01-19

关于显示不更新,由于代码不全无法给出解答。

问题:如果我想在C++中设置一个Label控件的text值,该怎么做呢?
解答:可以使用下面的语句将类的对象注册到QML中
    ClassName ClassObjectName;
    QQmlApplicationEngine engine;
    qmlRegisterUncreatableType<ClassName, 1>("ClassObjectName", 1, 0, "ClassName", QString());


设置Text值:可以在ClassName 类中增加一个信号函数,然后在QML中绑定text修改的函数,这样就可以修改了。
QML代码:
    ClassObjectName.sigChangeText.connect(textChangeInQml);
    function textChangeInQml(textVal) {
        text = textVal;
    }
快速回复
限100 字节
 
上一个 下一个