退伍军人C ++和C#/ WinForms程序员,熟悉Qt / QML。
有很多关于如何从QML调用C ++的信息,而且我的工作得很好,但我宁愿被动地对待QML并且在C ++中操纵它可能的。
例如:
frmLogin::frmLogin()
{
// Load QML file
// Wire up controls to their own pointers
cmdOK = QtQuick_GetControlFromQML("cmdOK");
cmdQuit = QtQuick_GetControlFromQML("cmdQuit");
}
void frmLogin::Show()
{
MyQMLPointerToWindow->Show();
}
void frmLogin::DoSomethingFromCPP()
{
cmdOK->SetProperty("text", "I just changed the button text");
rectBox->SetProperty("visible", true); // rectBox Rectangle from QML now appears on the screen
frmMainMenu = new frmMainMenu(); // Create new main menu window
frmMainMenu->ShowDialog(); // modal display
}
有办法做到这一点吗?是否非常沮丧?我试图制作一个多表单模态应用程序。很难在所有这些上找到直截了当的答案,因为看起来QtQuick已经经历了几次设计迭代。任何建议表示赞赏!
答案 0 :(得分:4)
如果您知道自己感兴趣的项目objectName
,可以使用QObject::findChild()
:
QQuickItem *okButton = findChild<QQuickItem*>("cmdOK");
如果按钮在QML中声明为属性:
Item {
id: item
property alias button: item.button
Button {
id: button
text: "OK"
}
}
然后您可以在C ++中将其作为属性访问:
QObject *button = property("button").value<QObject*>();
button->setProperty("text", "I just changed the button text");