qt - 如何在 QML javascript 功能块中创建 C++ QObject?
问题描述
与此问题类似,我想实例化 QObject 的子类,但我想在 javascript 函数块本身中执行此操作。
我有一堂课:
class CoverageKind : public QObject {
Q_OBJECT
public:
int64_t id;
QString coverage_kind;
CoverageKind(QObject * parent=nullptr);
Q_PROPERTY(int64_t id MEMBER id NOTIFY id_changed)
Q_PROPERTY(QString coverage_kind MEMBER coverage_kind NOTIFY coverage_kind_changed)
signals:
void id_changed();
void coverage_kind_changed();
};
这是在 QML 中注册的,例如:
qmlRegisterType<CoverageKind>("com.example.CoverageKind", 0, 1, "CoverageKind");
导入后com.example.CoverageKind
,我可以像这样实例化这个 QObject 子类:
Item {
CoverageKind {
id: ck
Component.onCompleted: {
console.log('Created CoverageKind! ', ck);
}
}
}
哪个打印:
Created CoverageKind! CoverageKind(0x19b51b0)
但是,如果我这样做:
import com.example.CoverageKind 0.1;
Item {
CoverageKind ck;
Component.onCompleted: {
ck = new CoverageKind();
}
}
我TypeError: Type error
上ck = new ...
线了。
我有一种惯用的方式可以从 QML javascript 块中实例化 C++ QObject 子类吗?
我可以
var ck = Qt.createComponent("import com.example.CoverageKind 0.1; CoverageKind{}");
这感觉真的很笨拙。我也可以创建一个工厂函数,但我希望能够更符合人体工程学地在 javascript 中创建这些对象。
解决方案
new
中不存在QML
,与您想要的最接近的是创建CoverageKind
最初为 null 的类型的属性,并且Component.onCompleted
您将被分配使用创建的值Qt.createQmlObject()
。
import QtQuick 2.0
import com.example.CoverageKind 0.1;
Item {
id: parentItem
property CoverageKind ck: null
Component.onCompleted: {
ck = Qt.createQmlObject('import com.example.CoverageKind 0.1; CoverageKind{}',
parentItem,
"dynamicSnippet1");
}
}
推荐阅读
- python - Python名称错误8
- mysql - SQL查询天数差异
- python - 如何打破python中的循环
- json - 在shell中迭代json
- python - 如何在python中对具有至少一个相同值的多行进行聚类?
- ios - 是否可以使用 AVAssetWriter 将广播样本编码为 MPEG-ts 或 fmp4 文件?
- freeradius - 在 CentOS 中配置 FreeRADIUS rlm_rest 模块
- amazon-web-services - boto3 s3角色arn
- youtube - YouTube 应用中的视频开始/结束时间
- html - 来自 HTML 表的 Powershell 变量一值