Ich habe ein Problem mit einem MessageDialog
Signal in QML. In meinem MessageDialog
habe ich zwei Tasten für Ja und Nein. Ich möchte jede Taste mit einem Signal verbinden. Hier ist meine qml Datei:Wie verbinde ich ein QML-Signal mit einem C++ - Slot?
class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot(const QString &msg) {
qDebug() << "Called the C++ slot with message:" << msg;
}
};
Und hier ist, wie ich diese verwenden in Haupt:
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")
}
}
Hier mein Schlitz ist
QQuickView view(QUrl::fromLocalFile("window.qml"));
QObject *item = view.rootObject();
AddData myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
view.show();
Es gibt mir den Fehler:
C2665: 'QObject::connect': none of the 3 overloads could convert all the argument types
Ich habe versucht viele t Ich kann aber nicht arbeiten QML-Signal und C++ - Slots. Auch ich habe das Beispiel von hier Qt doc versuchen und mir den gleichen Fehler geben.
Kann mir jemand eine Idee geben, wie man QML-Signal und C++ - Steckplätze für eine MessageDialog
verbindet?
Wo haben Sie das Signal 'qmlSignal' definiert? Nicht in 'QObject * item = view.rootObject();' – xander
Es ist das erste Mal, wenn ich mit dem Signal von qml.Ich verstehe nicht wirklich, was soll ich mehr tun.Wenn eine Taste gedrückt wird, emittiert es ein Signal, das sein sollte in C++ fangen, schreiben? – John
Noch können Sie Ihr 'view.rootObject()' debuggen und sehen, dass das nicht Ihr MessageDialog ist, in dem das Signal definiert wird. Also definiere es entweder in deinem root 'Item' oder hol dir das' MessageDialog' Kind-Objekt in C++, um das Signal zu verbinden. – xander