3

リソースファイル(resources.qrc)からロードされた画像(QLabelの背景として)を表示するカスタムウィジェットをロードして表示するプラグインがあります。私が直面している問題は、プラグインが読み込まれると、ウィジェットは正しく表示されますが、画像は表示されないことです。「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)
4

1 に答える 1

6

問題が解決しました。

問題は、メイン アプリケーションに同じ名前の qrc ファイルが既に存在することでした ( resources.qrc)。メインアプリによって読み込まれるプラグインには別のresources.qrcファイルがありますが、メインアプリには同じ名前のプラグインが既にあるため、読み込まれませんでした。プラグインのリソース ファイルの名前を変更したところ、問題なく動作しました。もちろん、クラスのコンストラクターから呼び出されるを変更するQ_INIT_RESOURCE( resources );必要がありました ( )。つまり、プラグイン ( ) のコンストラクタにある必要はありません。クラスはプラグインではなくリソースファイルを使用するクラスであるため、これは理にかなっています。Q_INIT_RESOURCE( new_resource_file_basename );MyWidgetMyWidget::MyWidget()MyPlugin::MyPlugin()MyWidget

于 2011-02-25T14:47:44.080 に答える