c++ - 从 C++ 插槽更改 QML 对象

标签 c++ qt qml

我想从 C++ 中的插槽更改 QML 中定义的对象。在插槽 startButtonClicked() 中,我启动计时器,每秒调用插槽 getData()。如何从 C++ 插槽 genData() 更改 QML 中定义的标签?现在我只能从 main.cpp 进行更改

class LogicClass : public QObject
{
        Q_OBJECT
public:
    LogicClass();
    ~LogicClass();

public slots:
    void startButtonClicked(const QVariant &v);
    void getData();
};

主要:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    class LogicClass logicClass;

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

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

    QObject::connect(qmlObject, SIGNAL(qmlSignal(QVariant)),&logicClass, SLOT(startButtonClicked(QVariant)));

    return app.exec();
}

qml:

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2

ApplicationWindow {
    id: window
    objectName: "window"
    visible: true
    width: 640
    height: 520
    title: qsTr("MY app")
        Button {
            id: startButton
            objectName: "startButton"
            x: 25
            text: qsTr("Start")

            signal qmlSignal(var anObject)

            MouseArea {
                    anchors.fill: parent
                    onClicked: startButton.qmlSignal(startButton)
                }
        }     
        Label {
            objectName: "latitudeLabelValue"
            id: latitudeLabelValue
            y: 478
            width: 50
            text: qsTr("")
        }

    }

}

最佳答案

您必须使用 setProperty 方法:

    QObject *lblLatitute = rootObject->findChild<QObject*>("latitudeLabelValue");

    lblLatitute->setProperty("text", "234.234");

但考虑使用模型/ View /委托(delegate)范式。

关于c++ - 从 C++ 插槽更改 QML 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38346606/

相关文章:

c++ - PostgreSQL:如何为单元测试创​​建一个临时用户和数据库?

c++ - Cpp 返回好奇心

c++ - Qt 回调列表

c++ - Qt:Qt 应用程序中的键盘快捷键分配(使用 "&")是否不适用于 Mac OSX?

qt-creator - QML 项目的 QtCreator 中未启用“运行”按钮

properties - 如何在更改之前获取先前的属性值? (在 QML 中)

c++ - Linux 上的文件描述符 3 有什么特别之处?

c++ - 如何知道 dlclose() 库的进程是否真正完成?

qt - 如何在 Qt 中找到屏幕/桌面尺寸,以便显示桌面通知?

macos - 带有 Qt3D 5.12.2 和 QML、SceneLoader : Found no suitable importer plugin for 3ds obj 的 OSX