声明要在 qml 和 cpp 文件中使用的全局字符串
Declare global strings for use in qml and cpp files
我有大约 200 个字符串常量,我想在某个 .h 文件中声明这些常量,并在我的 qml 和 Qt 项目中的 .cpp 文件中全局访问。我已经能够通过使用 Q_NAMESPACE 和 Q_ENUM_NS(enumName( 来使用枚举来做到这一点。我怎样才能用字符串做类似的事情?
谢谢
我不知道如何处理全局,但你可以这样做:
https://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html#registering-c-types-with-the-qml-type-system
例如,使用一个名为 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;
};
主要.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
相关文章:
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- 在.cpp文件之间传递全局字符串变量?
- 乘以字符串/数组和全局数组
- 在 LLVM 中获取全局字符串值
- 如何将字符串的全局映射初始化为函数指针
- 将 argv 复制到新的全局向量字符串
- 使用 RE2::全局替换的转义字符串
- QJSEngine全局字符串比较
- C 中的全局字符串数组
- C++存储全局 std::字符串标签与 getter 和 setter 的策略
- C++预处理器确保字符串全局唯一
- 全局静态常量字符串不会初始化
- 创建全局常量C字符串的正确方法
- 全局std::字符串和一个定义规则
- C++:如何修改全局字符字符串
- 如何在c++中通过地址传递将scanf字符串传递给全局字符数组
- 接收到非空内容后,全局字符串保持为空
- 有效地从字符串中读取两个逗号分隔的浮点数,而不受全局语言环境的影响
- 在JavaScriptCore的全局对象上公开一个字符串
- 使用在全局作用域中声明的Qt本地化字符串