如何使用C 插槽连接QML信号
How to connect a QML signal with a C++ slot?
我在QML中有MessageDialog
信号的问题。在我的MessageDialog
中,我有两个按钮,是YES 和 no 。我想用信号连接每个按钮。这是我的QML文件:
import QtQuick 2.2
import QtQuick.Dialogs 1.1
Item{
MessageDialog {
signal qmlYesSig(string msg)
signal qmlNoSig (string msg)
title: "Send data?"
icon: StandardIcon.Question
text: "Do you want to save your data on the online platform?"
detailedText: "Click Yes "
standardButtons: StandardButton.Yes | StandardButton.No
Component.onCompleted: visible = true
onYes: qmlYesSig("From yes")
onNo: qmlNoSig("From no")
}
}
这是我的插槽:
class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot(const QString &msg) {
qDebug() << "Called the C++ slot with message:" << msg;
}
};
这是我在主要中使用它的方式:
QQuickView view(QUrl::fromLocalFile("window.qml"));
QObject *item = view.rootObject();
AddData myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
view.show();
它给我错误:
c2665:'qobject :: connect':3个超载都不能转换所有参数类型
我尝试过很多次,但是我无法制作工作QML信号和C 插槽。另外,我尝试了QT文档的示例,并给我同样的错误。
有人可以给我一个想法,如何连接 MessageDialog
的QML信号和C 插槽?
您的QML文件是:
Item{
MessageDialog {
signal qmlYesSig(string msg)
signal qmlNoSig (string msg)
[...]
}
}
和您的C 代码是:
QObject *item = view.rootObject();
AddData myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
这意味着您正在寻找QML文件根项目中的称为" qmlsignal"的信号。这个根项目是
Item{}
如您所见,没有信号称为" qmlSignal"。
您必须在根项目中定义信号并从消息框发射。
Item{
signal qmlSignal(string msg)
MessageDialog {
onYes: parent.qmlSignal("From yes")
onNo: parent.qmlSignal("From no")
}
}
您可以将C QObject暴露于QML引擎并连接到QML侧的C QObject的插槽:
在C 文件中:
view.rootContext()->setContextProperty("object", this); // replace this with appropriate object
在qml中:
qmlYesSig.connect(object.cppSlot);
相关文章:
- 如何在没有信号的情况下从C++执行QML插槽
- 控制带有信号/插槽的Qt QML滑动视图
- C++发出信号稍后在 QML 中调用
- 无法将 Qml 信号连接到C++插槽
- 可以在 QObject::connect() C++中连接 QML 对象现有信号?
- 使用 enum 参数将 C++ 对象信号连接到 QML 信号处理程序
- 销毁 qml 对象后的信号槽连接
- 当通过引用传递 QObject 时,C++信号的参数在 QML 中显示为"未定义"
- QML:收到C 信号从C 传递时刷新问题
- QT5 C 信号到QML插槽不起作用
- C++和 QML:将 QML 信号连接到C++插槽
- QML和C 连接到信号
- 如何使用C 插槽连接QML信号
- QT:C 信号到QML连接
- QML C 信号插槽不起作用
- 连接到来自 QML C++信号
- 如何从另一个线程的 cpp 代码同步调用 qml 信号处理程序
- QObject::connect:在 c++ Qt 5.3 中连接 qml 信号时没有这样的信号
- 将QML信号连接到c++ 11 lambda插槽(Qt 5)
- 在QML信号中公开枚举