c++ - 声明用于 qml 和 cpp 文件的全局字符串
问题描述
我有大约 200 个字符串常量,我想在一些 .h 文件中声明并在我的 Qt 项目中的 qml 和 .cpp 文件中全局访问它们。通过使用 Q_NAMESPACE 和 Q_ENUM_NS(enumName),我已经能够使用枚举来做到这一点。我怎样才能用字符串做类似的事情?
谢谢
解决方案
我不知道如何处理全局,但你可以这样做:
例如,一个名为 myStr 的字符串:
class backend_class : public QObject
{
Q_OBJECT
Q_PROPERTY(QString myStr READ myStr WRITE myStr NOTIFY myStrChanged )
public:
QString myStr() const { return a_myStr ; }
void myStr(QString value) {
if (a_myStr == value) return;
a_myStr = value;
emit myStrChanged(value);
}
Q_SIGNAL void myStrChanged(QString value);
private:
QString a_myStr;
};
在 main.cpp 在引擎加载之前添加:
qmlRegisterType<backend_class>(
"my.cpp.qml.backend", 1, 0, "BackEnd"
);
在你的 main.qml 添加一个组件:
BackEnd { id: cpp }
现在您的字符串在您的 QML 代码中可用,如下所示:
cpp.myStr
您可以对列表执行相同操作:
// funny macro property automation
#define AUTO_PROPERTY(TYPE, NAME) \
Q_PROPERTY(TYPE NAME READ NAME WRITE NAME NOTIFY NAME ## Changed ) \
public: \
TYPE NAME() const { return a_ ## NAME ; } \
void NAME(TYPE value) { \
if (a_ ## NAME == value) return; \
a_ ## NAME = value; \
emit NAME ## Changed(value); \
} \
Q_SIGNAL void NAME ## Changed(TYPE value);\
private: \
TYPE a_ ## NAME;
class backend_class : public QObject
{
Q_OBJECT
AUTO_PROPERTY( QStringList, strings )
public:
backend_class() {
a_strings << QString("Hello");
a_strings << QString("Hello");
a_strings << QString("Hello");
}
};
请注意,QStringList 将被转换为 QML 中的数组。
对于更复杂的类型,请使用:
https://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html#properties-with-object-list-types https://code.qt.io/cgit/qt/qtdeclarative.git/tree /examples/qml/referenceexamples/properties?h=5.14
推荐阅读
- javascript - 在javascript中同时比较多个变量
- azure-data-factory-2 - ADF v2 - Web 活动 - 无法检索 POST 输出
- mule - ByteBuddy 1.10.2 抛出 `java.lang.IllegalStateException: Cannot resolve type description for java.lang.Exception`,和类似的
- c++ - C++ 中与类方法有关的辅助函数放在哪里
- javascript - oracledb 中未定义连接
- mysql - 如何使用数据表从 Laravel 中的数据透视表中检索数据
- django - 如何在Django中根据年龄组计算员工人数
- python - 如何在不使用任何for循环的情况下查找整数是否在文件的前两列之间
- haskell - 递归函数组合中的惰性
- java - 映射到具有复合键的类时,Spring Data MongoDB 中的分组返回 NULL _id