查看完整版本: [-- C++中读写qml对象的属性UI显示不更新问题 --]

QTCN开发网 -> Qt QML开发 -> C++中读写qml对象的属性UI显示不更新问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

971586331 2021-01-14 01:26

C++中读写qml对象的属性UI显示不更新问题

各位大佬,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)
    {
        QQmlEngine *page2_engine = new QQmlEngine;
        QQmlComponent *component = new QQmlComponent(page2_engine, "qrc:/Page2Form.ui.qml");
        page2_obj = component->create();

        led_obj = page2_obj->findChild<QObject*>("led");
        data_2_obj = page2_obj->findChild<QObject*>("data_2");
        warm1_obj = page2_obj->findChild<QObject*>("warm1");
    }

    void mainwindow::button_test()
    {
        static int index = 0;
        qDebug("button_test()");
        warm1_obj->setProperty("text", index);
            index ++;
    }

  1. Label {
                    id: lable1
                    objectName: "warm1"
                    text: qsTr("预热状态:")
                    onTextChanged: {
                        console.log("text = ", text)
                    }
                }



shanquan 2021-01-19 07:23

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

问题:如果我想在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;
    }


查看完整版本: [-- C++中读写qml对象的属性UI显示不更新问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled