首页| 论坛| 消息

标题:C++中读写qml对象的属性UI显示不更新问题
作者:971586331
日期:2021-01-14 01:26
内容:

各位大佬,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值,该怎么做呢。
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("led");
data_2_obj = page2_obj->findChild("data_2");
warm1_obj = page2_obj->findChild("warm1");
}
void mainwindow::button_test()
{
static int index = 0;
qDebug("button_test()");
warm1_obj->setProperty("text", index);
index ++;
}
Label {
id: lable1
objectName: "warm1"
text: qsTr("预热状态:")
onTextChanged: {
console.log("text = ", te ..


#1 [shanquan 01-19 07:23]
关于显示不更新,由于代码不全无法给出解答。
问题:如果我想在C++中设置一个Label控件的text值,该怎么做呢?
解答:可以使用下面的语句将类的对象注册到QML中
ClassName ClassObjectName;
QQmlApplicationEngine engine;
qmlRegisterUncreatableType("ClassObjectName", 1, 0, "ClassName", QString());

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

回复 发表
主题 版块