3

我有一个插件,它加载并显示一个自定义小部件,该小部件显示从资源文件 (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)
4

1 回答 1

6

问题解决了。

问题是主应用程序已经有一个同名的 qrc 文件 ( resources.qrc)。插件——被主应用加载——有一个不同的resources.qrc文件,但是因为主应用已经有一个同名的文件,所以它没有加载它。我在插件中更改了资源文件的名称并完美运行。当然,我必须更改从类 ( )的构造函数中调用的Q_INIT_RESOURCE( resources );to 。换句话说,它不需要在插件的构造函数中()。这是有道理的,因为类是使用资源文件的类,而不是插件。Q_INIT_RESOURCE( new_resource_file_basename );MyWidgetMyWidget::MyWidget()MyPlugin::MyPlugin()MyWidget

于 2011-02-25T14:47:44.080 回答