c++ - 如何从 C++ 端连接到 QML 项目的 onClick 事件
问题描述
场景:
我有一个在Qt 5.9.4商业版上运行的Qt 应用程序。它是一个基于iOS和Android的应用程序。QtQuick
QML
我QML
在 UI 上有一个项目,如下所示:
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
}
问题:
我想someItem
在 C++ 方法或 lambda 中监听 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";
}
推荐阅读
- python - 熊猫数据框图的步长/尖峰检测故障?
- r - 谷歌云服务器虚拟机可以通过 SSH 访问我的本地机器吗?
- python - Django 反向正则表达式匹配
- avaloniaui - Avalonia UI,通过绘制事物创建自定义控件
- java - OneToMany 双向关系不在子实体中插入外键
- python - 有没有办法获得 tkinter 正方形的颜色?
- gradle - 从脚本返回的 Gradle 导出环境
- python - 为什么 jQuery 支持的注册按钮没有响应?
- android-constraintlayout - android constraintlayout,椭圆不能按预期工作
- r - read.csv 在 R 中将列名向右移动