Проблемы с загрузкой Qt UI (с изображениями) из плагина (.so) - PullRequest
3 голосов
/ 24 февраля 2011

У меня есть плагин, который загружает и показывает пользовательский виджет, который отображает изображение (в качестве фона для QLabel), загруженное из файла ресурсов (resources.qrc).Проблема, с которой я сталкиваюсь, заключается в том, что, как только плагин загружен, он правильно отображает виджет, но не изображение.Я пытался поместить "Q_INIT_RESOURCE (resources)" везде, но ничего не происходит.Я создал много пользовательских виджетов, которые используют файлы 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)

1 Ответ

5 голосов
/ 25 февраля 2011

Проблема решена.

Проблема заключалась в том, что основное приложение уже имело файл qrc с таким именем (resources.qrc).Плагин, загружаемый основным приложением, имеет другой файл resources.qrc, но поскольку у основного приложения уже был файл с тем же именем, он не загружал его.Я изменил имя файла ресурсов в плагине и работал отлично.Конечно, мне пришлось изменить Q_INIT_RESOURCE( resources ); на Q_INIT_RESOURCE( new_resource_file_basename );, который вызывался из конструктора класса MyWidget (MyWidget::MyWidget()).Другими словами, он НЕ обязательно должен быть в конструкторе плагина (MyPlugin::MyPlugin()).Это имеет смысл, поскольку класс MyWidget - это тот, который использует файл ресурсов, а не плагин.

...