[英]QML signal QT slot with QQuickView
您好,我在使用QQuickView時將QML信號與Qt插槽連接時遇到問題,這是我的main.cpp:
ModelValueReceivers *mvr;
mvr = new ModelValueReceivers();
QQuickView view;
view.setSource(QUrl(("qrc:///Main.qml")));
QQuickView loginScreenView;
loginScreenView.setSource(QUrl(("qrc:///LoginScreen.qml")));
QObject *loginScreen = loginScreenView.rootObject();
QObject::connect(loginScreen, SIGNAL(qmlSignal(QString, int)), mvr->valuesReceivers[U1], SLOT(start(QString, int)));
view.show()
在ModelValueReceivers中是插槽公共插槽: void start(QString ipAddress, int tcpPort);
在LoginScreen.qml中,我有信號: signal qmlSignal(string addressIP, int portTCP)
並發出onClicked
onClicked: {
console.log("onClicked");
qmlSignal(ipTextField.text , parseInt(tcpPortTextField.text))
}
在控制台中,我可以看到日志“ onClicked”,但是該插槽沒有啟動。
在Main.qml中,我有:
Rectangle {
id: screen; width: 320; height: 480;
color: "#ffffff"
StackView{
id: sv
property StackView sv: sv
initialItem: Qt.resolvedUrl("qrc:///LoginScreen.qml");
} }`
我認為,除非LoginScreen.qml
是單例對象,否則您將使用LoginScreen.qml
2個不同對象,一個在main.cpp
,另一個在Main.qml
。
更新 :
可能是,您可以這樣做:
Main.qml
...
signal signalFromLogin(string, int);
property Component loginScreen : LoginScreen {
onQmlSignal: signalFromLogin(addressIP, portTCP);
}
StackView{
id: sv
property StackView sv: sv
initialItem: loginScreen;
}
現在,在您的main.cpp
QQuickView view;
view.setSource(QUrl(("qrc:///Main.qml")));
QObject* mainScreen = view.rootObject();
QObject::connect(maininScreen, SIGNAL(signalFromLogin(QString, int)), mvr->valuesReceivers[U1], SLOT(start(QString, int)));
請注意,我尚未測試此代碼。
好的,我已經使用TabView完成了此操作,並且每個視圖/文件都插入到單獨的選項卡中,因此現在我可以從Main訪問所有選項卡了。 有一個例子: TabView
將文件插入選項卡: component: Qt.createComponent("qrc:///LoginScreen.qml")
在main.cpp中,我添加: QQmlContext* ctx = view.rootContext(); ctx->setContextProperty("controller", &ctrl);
QQmlContext* ctx = view.rootContext(); ctx->setContextProperty("controller", &ctrl);
在每個qml文件中,我可以將信號QML連接到Qt插槽,將Qt信號連接到Qml插槽:
Connections{
target: controller
onSendValue:{
u1TextField.text=String(value)
}
}
onClicked: {
console.log("Button Clicked")
controller.on_closeAppButton_clicked()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.