繁体   English   中英

我也可以在 QML 文件中使用 C++ 中的常量吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM