我有下一个情况:我需要在独立静态库中创建小部件,然后将其与最终应用程序(visual c++ 9.0,qt 4.5)链接。这个静态小部件库包含一些资源(图标),并由几个 .cpp 文件组成(每个文件都包含独立的小部件)。据我所知,如果我在静态库中使用它们(资源),我必须初始化 qt 资源系统,并调用“Q_INIT_RESOURCE(resource_file_name)”。我用下一个代码解决了这个问题(在静态库中的每个 .cpp 文件中):
#include <QAbstractButton>
namespace {
struct StaticLibInitializer
{
StaticLibInitializer()
{
Q_INIT_RESOURCE(qtwidgets_custom_resources);
}
};
StaticLibInitializer staticLibInitializer;
}
// ... widget code ....
我没有使用第一种方法,而是在静态库项目中使用初始化代码创建了单独的 init.cpp 文件(以避免在每个 .cpp 文件中包含初始化代码),但这不起作用。
为什么这不起作用?
这种使用 StaticLibInitializer 的方法在各种编译器和平台之间是否安全且可移植?