我有一个插件,可以加载并显示一个自定义小部件,该小部件显示从资源文件 (resources.qrc) 加载的图像(作为 QLabel 的背景)。我面临的问题是,加载插件后,它会正确显示小部件,但不显示图像。我尝试将“Q_INIT_RESOURCE(资源)”放在任何地方,但没有任何反应。我创建了许多使用 qrc 文件来显示图像的自定义小部件,但仅直接在应用程序内,效果很好。这次是来自插件,所以这里一定是我遗漏了一些东西。有什么帮助吗?
// TheInterface.h
class TheInterface
{
...
}
Q_DECLARE_INTERFACE(TheInterface,"com.system.subsystem.TheInterface/1.0");
// MyWidget.h
class MyWidget : public QWidget, public Ui::MyWidget
{
Q_OBJECT
...
}
// MyPlugin.h
#include "TheInterface.h"
class MyPlugin : public QOBject,
public TheInterface
{
Q_OBJECT
Q_INTERFACES(TheInterface)
...
};
// MyPlugin.cpp
#include "MyPlugin.h"
#include "MyWidget.h"
MyPlugin::MyPlugin()
{
MyPlugin* w = new MyPlugin();
w->show();
}
Q_EXPORT_PLUGIN2(myplugin, MyPlugin)
问题解决了。
问题是主应用程序已经有一个同名的 qrc 文件(resources.qrc
)。该插件——由主应用程序加载——有不同的resources.qrc
文件,但因为主应用程序已经有一个同名的文件,所以它没有加载它。我更改了插件中资源文件的名称并且工作正常。当然,我必须改变Q_INIT_RESOURCE( resources );
to Q_INIT_RESOURCE( new_resource_file_basename );
这是从构造函数调用的MyWidget
class (MyWidget::MyWidget()
)。换句话说,它不需要位于插件的构造函数中(MyPlugin::MyPlugin()
)。这是有道理的,因为MyWidget
类是使用资源文件的类,而不是插件的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)