通常,我可以在头文件中声明一个常量并将其定义为源文件。之后,我可以在包含标头的每个文件中使用常量。
例子:
// constants.h
extern const std::string HELLO_WORLD;
// constants.cpp
const std::string HELLO_WORLD = "Hello World";
Run Code Online (Sandbox Code Playgroud)
现在我想在 QML 文件中使用这些常量。
是否有一个简单的解决方案可以实现此目的,例如:
#inlude constants.h
或
import constants.h
?
或者是通过创建一个以这些常量作为成员的类,然后使该类在 QML 中可访问来实现此目的的唯一可能方法?
(类似于 Qt 文档中描述的内容:Defining QML Types from C++)
使用 Qt 5.15 的新 QML 类型注册和 C++ 17。
共享常量.h
#include <QtQml>
#define SHARED_CONSTANT(type, name, value) \
static inline const type name = value; \
Q_PROPERTY(type name MEMBER name CONSTANT)
class SharedConstants : public QObject
{
Q_OBJECT
QML_UNCREATABLE("Class only exposes constants to QML.")
QML_ELEMENT
QML_SINGLETON
public:
SHARED_CONSTANT(QString, PLATFORM_ARM64, QStringLiteral("arm64"));
SHARED_CONSTANT(QString, PLATFORM_ARM32, QStringLiteral("arm"));
SHARED_CONSTANT(QString, PLATFORM_X64, QStringLiteral("x64"));
SHARED_CONSTANT(QString, PLATFORM_X86, QStringLiteral("x86"));
SHARED_CONSTANT(QString, PLATFORM_CHPE, QStringLiteral("chpe"));
};
Run Code Online (Sandbox Code Playgroud)
我的应用程序专业版
...
CONFIG += c++17 qmltypes
QML_IMPORT_NAME = MyApp
QML_IMPORT_MAJOR_VERSION = 1
...
Run Code Online (Sandbox Code Playgroud)
示例.qml
import MyApp 1.0
Text {
text: SharedConstants.PLATFORM_ARM64
}
Run Code Online (Sandbox Code Playgroud)
示例.cpp
#include "SharedConstants.h"
const QString arm = SharedConstants::PLATFORM_ARM32;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3259 次 |
最近记录: |