1

QDockWidget をメイン ウィジェットとする QTDesigner ダイアログがあります。メインウィンドウにドッキングしてダイアログを表示すると、自動的に自動的に非表示になりますが、マウスを使用して表示/非表示にすることができます。デフォルトで表示を維持したいと思います。マウスを使用して大きなサイズ (画面サイズの約 2/3) にサイズ変更し、ダイアログを閉じて後で表示すると、最後の大きなサイズでアプリケーションを閉じても、思いどおりに動作します。

これらは私のクラスです:

/** created automatically by QT compiler */
class Ui_OfsIndSelAttribBase
{
    public:
        QWidget *dockWidgetContents;
        QVBoxLayout *verticalLayout_10;
        QGroupBox *_p_gB_Filters;
        QVBoxLayout *verticalLayout_9;
        QVBoxLayout *verticalLayout_4;
        ....

        void setupUi(QDockWidget *dockWidget)
        {
            if (dockWidget->objectName().isEmpty())
                dockWidget->setObjectName(QString::fromUtf8("dockWidget"));
            dockWidget->resize(352, 789);
            dockWidget->setFloating(false);
            dockWidgetContents = new QWidget();
            dockWidgetContents->setObjectName(QString::fromUtf8("dockWidgetContents"));
            ...
        }
};

私のダイアログクラスツリー:

class FCSDockableInputDataQt: public QDockWidget
{
    Q_OBJECT

    public:
        /** GetMainWindow() returns a valid QT main window */
        FCSDockableInputDataQt(Qt::DockWidgetArea do = Qt::BottomDockWidgetArea,
                               Qt::WFlags f=0) :
            QDockWidget("MyDialog", GetMainWindow(), f)
       {
           ....
       }
};

/** this is my dialog management class */
class OfsIndSelAttribQt : public FCSDockableInputDataQt, 
                          public Ui::OfsIndSelAttribBase
{
    Q_OBJECT

    OfsIndSelAttribQt() :
        FCSDockableInputDataQt(Qt::RightDockWidgetArea)
    {
        setupUi(this);
        setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
        setFloating(false);
        ....
    }
};
4

2 に答える 2

1

ウィンドウの作成時に QDockWidget を非表示にしたいが、どこかのボタンをクリックしたときに表示または非表示を切り替えたいですか? setupUi メソッドで QDockWidget::hide() を呼び出し、小さなトグル ボタンをどこかに追加して、QDockWidget が切り替えられたときに、表示するか非表示にするかを伝える信号を QDockWidget に送信します。

于 2013-03-27T10:08:02.027 に答える
0

QAppltion シグナル aboutToQuit() を Dockwidget の SLOT に接続し、onQuit と言います。

QObject::connect(QApplication(), SIGNAL(aboutToQuit()), this, SLOT(onQuit()));

SLOT は次のようになります。

void CustomDock::onQuit()
{
  setVisible(false);
}

そう。アプリを閉じると、ドックが非表示になります。アプリを再度起動すると、QT は CustomDock の状態を非表示に戻します。

于 2014-04-01T10:11:13.853 に答える