qml从c ++设置文本属性

Posted

技术标签:

【中文标题】qml从c ++设置文本属性【英文标题】:qml set text property from c++ 【发布时间】:2018-12-11 08:19:40 【问题描述】:

我正在使用 qt-creator 创建一个快速应用程序 .qml 文件:

Window 
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MenuBar 
           Menu 
               title: "File"
               MenuItem   objectName: "buttonTest"
                   text: "Open"
              onTriggered: m.open()

               MenuItem  text: "show data"
                   onTriggered: m.data()
                  
               MenuItem  text: "Close"
                   onTriggered: Qt.quit()
           

       


    Text 
            id: name
            text: qsTr("no of vertices :")
        
    Text
    

        text: "..........."
        objectName: "textObject"

    
    

我想从 c++ 类中的方法设置“textObject”的文本属性 我尝试了以下代码:

void Mine::data()

QQmlApplicationEngine engine;
 QObject *rootObject = engine.rootObjects().first();
   QObject *qmlObject = rootObject->findChild<QObject*>("textObject");

     qmlObject->setProperty("text", "Text from C++");


但它显示以下错误: 断言:文件 /usr/include/qt5/QtCore/qlist.h 中的“!isEmpty()”,第 345 行

请帮忙?

【问题讨论】:

* 周围的 "textObject" 是什么? @Jiu 只是尝试一下让它变粗,我会更新帖子 使用您加载 QML 的 QQmlApplicationEngine 来搜索对象。而不是在堆栈上创建一个空引擎... 怎么用,不好意思我是新手 doc.qt.io/qt-5/qqmlapplicationengine.html 如果你了解QQmlApplicationEngine 是什么,你就会明白问题所在。 【参考方案1】:

你使用的引擎里面什么都没有,它是当场创建的,没有加载任何东西,因此根对象列表是空的。

您需要引用实际用于 QML 代码的 qml 引擎。在main.cpp 中创建的那个,所以你必须在main 之外使用它的类中传递并保留一个指向它的指针。

另外,请记住,从 C++ 进入 QML 几乎总是糟糕的设计。只是尝试一下也没关系,但在实际生产中,正确的做法是将 QML 连接到 C++。

【讨论】:

以上是关于qml从c ++设置文本属性的主要内容,如果未能解决你的问题,请参考以下文章

css布局方式及背景文本属性

设置为 nil 或 "" 时的 UILabel 文本属性使 UILabel 从视图中消失(Swift / Autolayout / iOS9.1)

文本标签的基本属性

HTML属性,标题,段落,文本格式化

如何从自定义属性中读取维度值?

WPF例2-一个文本框实时显示另一个文本框的内容