无法为 QML 注册命名空间
Unable to Register Namespace for QML
>我正在尝试注册一个仅包含具有qmlRegisterUncreatableMetaObject
命名空间的文件,以便在QML
中使用
命名空间在我的constants.h
文件中,如下所示:
#ifndef K_CONSTANTS_H
#define K_CONSTANTS_H
#include <QString>
#include <QObject>
static const QString K_Red = "#d20019";
static const QString K_DarkRed = "#a20000";
static const QString K_Green = "#1da019";
static const QString K_DarkGray = "#FF4b4b4b";
static const unsigned int EXIT_CODE_REBOOT = 1234567890;
namespace Strings {
Q_NAMESPACE
static const char* REPAIR = QT_TR_NOOP("Repair");
static const char* MAINTENANCE = QT_TR_NOOP("Maintenance");
static const char* DISTURBANCE = QT_TR_NOOP("Disturbance");
static const char* MEAL_BREAK = QT_TR_NOOP("Meal Break");
}
#endif // K_CONSTANTS_H
我正在尝试在调用app.exec()
之前调用的K_Administration.cpp
构造函数中注册。
qmlRegisterUncreatableMetaObject(Strings::staticMetaObject, "MyConstants", 1, 0, "Strings", "Not Instantiable!" );
这总是导致
k_administration.obj:-1:错误:LNK2001:未解析的外部符号 "struct QMetaObject const Strings::staticMetaObject" (?staticMetaObject@Strings@@3UQMetaObject@@B(
我可以从项目中的任何位置访问命名空间。也可以只打电话给Strings::staticMetaObject
。但是一旦Strings::staticMetaObject
被分配给一个值,它似乎就会失败。
也许重要的是要知道K_Administration.cpp
和K_Constants.h
在我的项目的 2 个不同的子项目中
由于K_Administration
和K_Constants
位于两个不同的项目中,因此有必要添加导出 delcaration。这可以位于其他文件中,也可以包含在同一文件中。
#if defined(CONSTANTS_LIBRARY)
# define CONSTANTS_EXPORT Q_DECL_EXPORT
#else
# define CONSTANTS_EXPORT Q_DECL_IMPORT
#endif
要导出命名空间,必须将其添加到命名空间中
CONSTANTS_EXPORT Q_NAMESPACE
注意:我犯了一个错误,我想将CONSTANTS_EXPORT
声明添加到命名空间定义行中。 类似于namespace CONSTANTS_EXPORT Strings {}
的东西,因为classes
也有类似的语法. 但在namespace
它是Q_NAMESPACE
的声明.我认为可以使用Q_NAMESPACE_EXPORT
并将出口申报保留为 Qt 5.14及更高版本。
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 无法为 QML 注册命名空间
- 使用libxml++为XPath注册命名空间