[英]Can I use constants from C++ also in QML files?
通常,我可以在头文件中声明一个常量并将其定义为源文件。 之后,我可以在每个包含标题的文件中使用常量。
示例:
// 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 文档中描述的内容:从 C++ 定义 QML 类型)
使用 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"));
};
我的应用程序
...
CONFIG += c++17 qmltypes
QML_IMPORT_NAME = MyApp
QML_IMPORT_MAJOR_VERSION = 1
...
示例.qml
import MyApp 1.0
Text {
text: SharedConstants.PLATFORM_ARM64
}
例子.cpp
#include "SharedConstants.h"
const QString arm = SharedConstants::PLATFORM_ARM32;
您可以使用 QVariant 将 C++ 中的值作为上下文属性公开给 QML。
QString testStr("test");
engine.rootContext()->setContextProperty(QStringLiteral("testStr"), QVariant::fromValue(testStr));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.