2

QWidgets について調べていたところ、実行時に読み込まれるウィジェットであるプラグインを作成したいと考えています。サンプルコードと要件を見ていたら、プラグインはインターフェイスと QObject を継承しているようです。すべて異なるボタンと異なるスロットを持つ QWidget プラグインを作成するにはどうすればよいですか? また、インターフェイスから継承するプラグインと、QWidget から継承する (QObject から継承する) ベースクラスを作成することは可能でしょうか。

http://developer.qt.nokia.com/doc/qt-4.8/plugins-howto.html

ただし、名前を知るだけで実行時にウィジェットをロードできるメタオブジェクトについて読みました (RTTI サポートは必要ありません)。しかし、正確には、クラスを認識するためにクラスをプロジェクトに配信するにはどうすればよいでしょうか? プラグインを扱うときは、.pro ファイルのさまざまなフラグ セットを使用してコンパイルする特別なプロジェクトにプラグインを含める必要があります。しかし、ここでどうすればよいでしょうか?

本当に qtplugin を使いたいのですが、どうすればいいですか?

アイデア:

プラグインが返す QWidget をプラグインに作成させることは、受け入れられ、最適でしょうか? プラグインなしでインターフェイスを作成する場合、デザイナーにプラグインを作成する意味がわかりません。それとも私はそれを誤解しましたか?

http://techbase.kde.org/Development/Tutorials/Writing_Qt_Designer_Plugins

class workspaceInterface {
   virtual QWidget* createWorkspace(QWidget* parent);
   ... other useful functions...
}

class mySpecialWidget : public QWidget {
    mySpecialWidget {
        add a layout, add some buttons, maybe change the color
    }
}

//plugin
#include "myspecialwidget.h"

class myPlugin : public QObject, public workspaceInterface {
    QWidget* createWorkspace(QWidget* parent) {
        return new MySpecialWidget();
    }
    .... 
}

このすべてのコードを 1 つのプロジェクトに入れ、プラグインとしてコンパイルし、メイン アプリケーションで探してロードします。そのインスタンスを作成し、表示するウィジェットを作成させます。

これを行うより良い方法はありますか、それともこれですか?

4

1 に答える 1

0

Qt Designer 用のカスタム ウィジェットの作成を探しているかもしれません。ウィジェット プラグインは から継承しQWidgetます。たとえば、World Time Clock Pluginを参照してください。

ウィジェット プラグインは主に Qt Designer を対象としていますが、その機能の一部はQUiLoaderを使用して実行時に使用できます。

編集:

Qt Designer プラグインを作成することは間違いなくいくらかの投資です。設計時のサポートが必要ない場合は、それらを作成する価値はほとんどありません。

独自のプラグイン インフラストラクチャの場合、標準化された API (エクスポート関数) を使用して一連の動的ライブラリにプラグインをパッケージ化して、プラグインを呼び出すことができます。

于 2012-02-10T01:36:19.533 に答える