0

カスタム ウィジェット「DuwagWidget」とカスタム ウィジェット プラグイン「DuwagWidgetPlugin」を作成しました。これは、qt デザイナー内でドラッグ アンド ドロップして duwag.ui ファイルを作成できます。

ただし、プログラムをコンパイルしようとすると、QT ユーザー インターフェイス コンパイラから ui_duwag.h が生成されますが、この自動生成ファイルでは、カスタム ウィジェット クラスの作成に必要な「DuwagWidget.h」が uic に含まれていません。 .

DuwagWidgetPlugin は (CustomWidgets を作成するための QT の Interface から派生した) 単なる DuwagWidget のファクトリ クラスです。

DuwagWidgetPlugin のコードは次のとおりです:^

    #include <DuwagWidgetPlugin.h>
    #include <QtPlugin>
    #include <qwidget.h>
    #include <MTBFWidget.h>


    DuwagWidgetPlugin::DuwagWidgetPlugin( QObject *parent ) : QObject(parent) {
        initialized = false;
    }

    void DuwagWidgetPlugin::initialize(QDesignerFormEditorInterface * /* core */) {

        if (initialized)
            return;
        initialized = true;
     }

    bool DuwagWidgetPlugin::isInitialized() const {
        return initialized;
    }

    QWidget *DuwagWidgetPlugin::createWidget(QWidget *parent) {
        return new DuwagWidget( parent );
    }

    QString DuwagWidgetPlugin::name() const {
        return "DuwagWidget";
    }

    QString DuwagWidgetPlugin::group() const {
        return "duwagplugin";
    }

    QIcon DuwagWidgetPlugin::icon() const {
        return QIcon();
    }

    QString DuwagWidgetPlugin::toolTip() const {
        return "The duwag control panel";
    }

    QString DuwagWidgetPlugin::whatsThis() const {
        return "The duwag Control panel";
    }

    bool DuwagWidgetPlugin::isContainer() const {
        return false;
    }

    QString DuwagWidgetPlugin::domXml() const {
        return  "<widget class=\"DuwagWidget\" name=\"DuwagWidget\">\n"
                    " <property name=\"geometry\">\n"
                "  <rect>\n"
                "   <x>0</x>\n"
                "   <y>0</y>\n"
                "   <width>100</width>\n"
                "   <height>100</height>\n"
                "  </rect>\n"
                " </property>\n"
                " <property name=\"toolTip\" >\n"
                "  <string>The MTBF Control panel</string>\n"
                " </property>\n"
                " <property name=\"whatsThis\" >\n"
                "  <string>The MTBF Control panel.</string>\n"
                " </property>\n"
                "</widget>\n";
    }

    QString DuwagWidgetPlugin::includeFile() const {
        return "DuwagWidget.h";
    }

    Q_EXPORT_PLUGIN2(duwagplugin, DuwagWidgetPlugin)

したがって、問題は、生成されたヘッダー ファイルで、それが何であるかがわからないため、カスタム ウィジェット「DuwagWidget」を作成できないことです。

4

1 に答える 1

0

QtDesigner .ui ファイルにカスタム クラスを含めるときに、この問題が発生しました。 「 Promote to..」オプションを使用すると、適切なヘッダーが追加されますuic

  1. レイアウト内の任意のウィジェットを右クリックします。
  2. [に昇格] を選択します。
  3. 基本クラスを選択し、昇格したクラスの名前「NewClass」を入力します。#include "NewClass.h"ファイル「ui_yourclass.h」に自動的に追加します。

残念ながら、これにより、別のデザイナー ファイルが同じカスタム クラスにアクセスし、両方の "ui_yourclass.h" ファイルが同じヘッダーからインクルードされている場合に、冗長なインクルード警告が作成されます。また、ウィジェットをプロモートする必要があるため、デザイナー レイアウト ファイル内でそのクラスの 1 つのインスタンスを作成して初期化することが必須になります。

私が読んだ別の方法は、[ツール] > [フォーム エディター] > [フォーム設定] に移動し、「ヒントを含める」というタイトルのセクションに「NewClass.h」を追加することです。しかし、私はこのようにしたことはありません。

于 2013-05-14T12:46:36.307 に答える