gpt4 book ai didi

c++ - 将 Signal QML 连接到 C++ (Qt5)

转载 作者:行者123 更新时间:2023-11-30 03:52:25 29 4
gpt4 key购买 nike

我想在单击按钮时更改矩形的颜色。它们都在 main.qml 文件中。我想向 C++ 后端发送信号以更改矩形的颜色。我似乎无法从文档中给出的代码中弄清楚

主要.qml: 导入 QtQuick 2.4 导入 QtQuick.Controls 1.3 导入 QtQuick.Window 2.2 导入 QtQuick.Dialogs 1.2

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


id:root

signal mysignal()


Rectangle{
anchors.left: parent.left
anchors.top: parent.top
height : 100
width : 100
}

Button
{

id: mybutton
anchors.right:parent.right
anchors.top:parent.top
height: 30
width: 50
onClicked:root.mysignal()

}

}

主要.cpp:

#include <QApplication>
#include <QQmlApplicationEngine>
#include<QtDebug>
#include <QQuickView>

class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot() {
qDebug() << "Called the C++ slot with message:";
}
};

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

MyClass myClass;

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

QPushButton *mybutton = engine.findChild("mybutton");

engine.connect(mybutton, SIGNAL(mySignal()),
&myClass, SLOT(cppSlot()));

return app.exec();
}

如有任何帮助,我们将不胜感激!

最佳答案

QPushButton *mybutton = engine.findChild("mybutton");

首先,QObject::findChild通过 object name 找到 QObjects,而不是 id(它对于上下文来说是本地的)。因此在 QML 中你需要这样的东西:

objectName: "mybutton"

其次,我认为您需要执行 findChild不是在引擎本身上,而是在从 QQmlApplicationEngine::rootObjects() 返回的根对象上.

// assuming there IS a first child
engine.rootObjects().at(0)->findChild<QObject*>("myButton");

第三,一个Button在 QML 中,用 C++ 中没有的类型表示。所以你不能只将结果分配给 QPushButton * , 但你需要坚持使用通用 QObject * .

关于c++ - 将 Signal QML 连接到 C++ (Qt5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697996/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com