如何从C++端挂接到 QML 项的 onClick 事件
How to hook up to the onClick event of a QML item from C++ side
场景:
我有一个运行在Qt 5.9.4商业版上的Qt应用程序。它是一个基于QtQuick
和QML
的应用程序,在iOS和Android上运行。
我在 UI 上有一个QML
项目,如下所示:
SomeItem {
text: qsTr("Some Item")
objectName: "someitem"
visible: false
onClicked: {
console.log("Some item was clicked")
}
}
我有一个C++功能,可以轻松控制SomeItem
的属性。
void MyCppClass::Func() {
QQuickItem *someItem = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("someitem");
someItem->setVisible(true); // this works
// How to listen to someItem's onClick event here
}
问:
我想在 C++ 方法或 lambda 中侦听someItem
的 onClick 事件,而不更改 QML 中的任何内容。基本上从一侧本身连接到someItem
C++的onClick信号。我该怎么做?
在一般情况下,用于交互的方法可能很危险,因为项目的生命周期取决于 QML,因此请确保它不会发生。转到您的请求,我假设MyCppClass继承自QObject或子类,您必须创建一个插槽并使用旧的连接语法:
*.h
class MyCppClass: public QObject
{
...
private slots:
void on_clicked();
...
};
*。.cpp
void MyCppClass::Func() {
QQuickItem *someItem = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("someitem");
if(!someItem)
return;
someItem->setVisible(true); // this works
connect(someItem, SIGNAL(clicked()), this, SLOT(on_clicked()));
}
void MyCppClass::on_clicked(){
qDebug()<<"on clicked";
}
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 数组初始值设定项的构造函数歧义
- C++17:如何在并行 STL 中获取工作项的索引
- 传递空初始值设定项列表时使用右值和左值引用候选项的重载解析
- C++ 替换字节数组中项的顺序
- 在 CPP 中打印具有重复项的选定长度字符的所有排列
- 列表视图项的替代颜色
- 清理"QSettings"注册表项的最佳方法(Windows上的Qt 5)
- 使用迭代器替换映射中的常量项的方法
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 访问类成员向量最后一项的正确方法
- 基于 QML 模型的组件在 android 上具有未定义的 modelData
- 如何从 c++ 更改 QML 项的属性
- 如何为第三方渲染提供空的QML项目的OpenGL上下文
- 如何连接来自c++代码的嵌套qml项的信号
- 如何从c++代码中发出特定QML项上下文中的信号
- 这是用QML绘制图形项的最佳方式