作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在单击按钮时更改矩形的颜色。它们都在 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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!