通常,我可以在头文件中声明一个常量并将其定义为源文件。之后,我可以在每个包含头部的文件中使用常量。
示例:
// constants.h
extern const std::string HELLO_WORLD;
// constants.cpp
const std::string HELLO_WORLD = "Hello World";
现在我想在QML文件中也使用常量。
是否有一个简单的解决方案来实现这一点,例如:
#inlude constants.h
或
import constants.h
?
或者是通过创建一个类来实现这一目标的唯一可行方法,该类将这些常量作为成员,然后使用QML访问类? (Qt文档中描述的内容:Defining QML Types from C++)
答案 0 :(得分:0)
您可以使用QVariant将值从C ++公开为QML作为上下文属性。
QString testStr("test");
engine.rootContext()->setContextProperty(QStringLiteral("testStr"), QVariant::fromValue(testStr));
答案 1 :(得分:0)
使用Qt 5.15的新QML类型注册和C ++ 17。
SharedConstants.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"));
};
MyApp.pro
...
CONFIG += c++17 qmltypes
QML_IMPORT_NAME = MyApp
QML_IMPORT_MAJOR_VERSION = 1
...
Example.qml
import MyApp 1.0
Text {
text: SharedConstants.PLATFORM_ARM64
}
Example.cpp
#include "SharedConstants.h"
const QString arm = SharedConstants::PLATFORM_ARM32;