在 C++ 中被动使用 QtQuick / QML
Posted
技术标签:
【中文标题】在 C++ 中被动使用 QtQuick / QML【英文标题】:Using QtQuick / QML Passively with C++ 【发布时间】:2014-08-07 15:35:47 【问题描述】:这里是资深 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 似乎已经经历了几次设计迭代。任何建议表示赞赏!
【问题讨论】:
如果你想用 C++ 做所有事情,你为什么还要使用 QML? 因为我想用Qt Quick GUI系统,而不是传统的Qt。 【参考方案1】:如果您知道您感兴趣的商品的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");
【讨论】:
全局property
函数来自哪里?以上是关于在 C++ 中被动使用 QtQuick / QML的主要内容,如果未能解决你的问题,请参考以下文章
将 QStandardItemModel 从 C++ 传递到 QtQuick / QML TableView 并显示它