如何从 QT 中的.cpp访问 QML 中的一个复选框
How to access one checkbox in QML from .cpp in QT?
>最近,我遇到了一个小问题,那就是从 QT 中的 cpp 访问 qml 中的复选框。所以问题很简单:我有一个main.qml
文件,它有一个复选框,我想根据启动应用程序时保存在QSettings中的配置将" checked
"属性更新为true或false。目前,我已经在应用程序启动时成功地从 cpp 文件中的 QSettings 加载了设置。那么如何修改这个cpp文件中的" checked
"属性呢?
我试过这个:http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html 并使用了findChild
函数,但它不起作用。
1),我把import <QtQuick>
放在cpp文件中,但我得到错误QtQuick file can't be found
。
2),我改成了"import <QtQuick/QQuickView>
"。解决了 1) 但此行QObject* object = view.rootObject();
出现新错误:
cannot initialize a variable of type 'QObject *' with an rvalue of type 'QQuickItem *`
3),我QObject* object = view.rootObject();
这一行改为QQuickItem* object = view.rootObject();
,之后使用了QObject* acbox = object->findChild<QObject* >("acbox");
。(acbox 是该复选框的对象名称)解决了2)但得到新的错误:
Undefined symbols for architecture x86_64:
"QQuickView::setSource(QUrl const&)", referenced from:
ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o
"QQuickView::QQuickView(QWindow*)", referenced from:
ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o
"QQuickView::~QQuickView()", referenced from:
ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o
"QQuickView::rootObject() const", referenced from:
ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
有人有什么建议吗?提前感谢!
您可以使用 cpp 中的 setProperty 在 QML 中设置属性,然后将其绑定到 qml 文件中的已检查状态 检查以下代码
C++部分:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlComponent component(&engine, QUrl("qrc:/main.qml"));
QObject *object = component.create();
object->setProperty("checkstatus", false);
return app.exec();
}
质量管理部分:
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
property bool checkstatus
CheckBox {
id:checkbox
text: qsTr("checkbox1")
checked: checkstatus
}
}
您是否在参考 QT 页面中尝试过该示例? 下面的示例将 QML 信号连接到 C++ 类的插槽,但我认为应该可以做相反的事情:您连接C++变量的信号,谁想要更新复选框。然后它连接到执行更新复选框的 QML 插槽。
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QObject *item = view.rootObject();
MyClass myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
view.show();
return app.exec();
}
- 根据变量使Qt UI中的复选框为已选中/未选中
- "动态创建的事件处理程序"复选框
- 有没有办法在取消选中复选框时隐藏按钮?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 设置复选框选项C++
- 如何在所有者描述的 MFC CMenu 派生菜单中显示复选框?
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 如何使复选框独占
- AccessObjectFromPoint 返回客户端对象而不是复选框
- Windows 32 API:2个复选框作为一个
- 如何在 QT3 中将复选框添加到 QFileDialog 窗口
- 在 QComboBox 中切换复选框
- 调整QT创建者的复选框
- 如何在C 上创建复选框过滤器
- 如何设置按钮的背景颜色,包括复选框按钮
- 使用 ffh.getFieldType() 检查复选框 == "/Btn" 与 qpdf lib
- 如何在多行文本C++的左上角显示复选框
- Win32如何制作多个复选框并以不同的方式管理它们
- 如何从 QT 中的.cpp访问 QML 中的一个复选框
- 是否可以在切换QTreeWidgetItem复选框时创建一个信号