我知道这可能是一个简单的但我刚刚开始使用qml和qt quick。我想显示一个MessageDialog,它包含我从C ++收到的文本,例如:
QML文件
import QtQuick 2.2
import QtQuick.Dialogs 1.1
import QtQuick.Window 2.1
Item {
id: container
property string text
property string alertBoxMsg: "Test"
property bool disabled: false
signal clicked
// Suitable default size
width: parent.width
height: parent.height
anchors.centerIn: parent
signal loginButtonClicked(string username, string userpwd);
Rectangle {
id: screenFrame
anchors.centerIn: parent
//border.color: "black"
//border.width: 5
//width: 200
//height: 200
Column {
id: simpleColumn
anchors.centerIn: parent
TextInput {
id: username
text: "username"
color: "green"
MouseArea {
anchors.fill: parent
onClicked: {
container.clearTextInput(username, "username");
}
}
}
TextInput {
id: userpassword
text: "password"
echoMode: TextInput.Password
MouseArea {
anchors.fill: parent
onClicked: {
container.clearTextInput(userpassword, "password");
}
}
}
Button {
id: loginButton
text: "Login"
property string alertBoxMsg: "None"
MouseArea {
anchors.fill: parent
onClicked: {
container.loginButtonClicked(username.text, userpassword.text);
}
}
}
MessageDialog {
id: messageBox;
objectName: "msgBox";
title: "Information";
//text: dialogText;
onAccepted: {
console.log("And of course you could only agree.")
Qt.quit()
}
function displayMessageBox(msg) {
messageBox.text = msg;
messageBox.open();
console.log("Got message:", messageBox.text);
}
}
}
}
function clearTextInput(textInputField, matchingText) {
if(textInputField.text == matchingText) {
textInputField.text = "";
}
textInputField.forceActiveFocus();
}
}
C ++文件
QMetaObject::invokeMethod(
msgBox,
"displayMessageBox",
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, toQmlMessage)
);
但MessageDialog拒绝显示,但控制台显示该消息。请帮帮我,我不知道我哪里出错了。我一直在努力解决这个问题。