我MessageDialog在QML中遇到信号问题。在我的MessageDialog我有两个按钮是和否。我想用信号连接每个按钮。这是我的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")
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的广告位:
class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot(const QString &msg) {
qDebug() << "Called the C++ slot with message:" << msg;
}
};
Run Code Online (Sandbox Code Playgroud)
这是我在main中使用此方法的方式:
QQuickView view(QUrl::fromLocalFile("window.qml"));
QObject *item = view.rootObject();
AddData myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
view.show();
Run Code Online (Sandbox Code Playgroud)
它给我错误:
C2665:'QObject :: connect':3个重载都不能转换所有参数类型
我已经尝试了很多次,但是无法使用QML信号和C ++插槽。我也尝试从这里Qt doc的示例,并给我同样的错误。
有人可以告诉我如何连接QML信号和C ++插槽MessageDialog吗?
您可以将C ++ QObject暴露给QML引擎,并从QML端连接到C ++ QObject的插槽:
在C ++文件中:
view.rootContext()->setContextProperty("object", this); // replace this with appropriate object
Run Code Online (Sandbox Code Playgroud)
在Qml中:
qmlYesSig.connect(object.cppSlot);
Run Code Online (Sandbox Code Playgroud)
小智 5
您的QML文件是:
Item{
MessageDialog {
signal qmlYesSig(string msg)
signal qmlNoSig (string msg)
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
您的C ++代码是:
QObject *item = view.rootObject();
AddData myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
Run Code Online (Sandbox Code Playgroud)
这意味着您正在QML文件的根项目中寻找一个名为“ qmlSignal”的信号。这个根项目很简单
Item{}
Run Code Online (Sandbox Code Playgroud)
如您所见,没有称为“ qmlSignal”的信号。
您必须在根项中定义信号并从消息框中发出它。
Item{
signal qmlSignal(string msg)
MessageDialog {
onYes: parent.qmlSignal("From yes")
onNo: parent.qmlSignal("From no")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3636 次 |
| 最近记录: |