QDockWidget在启动时自动隐藏

QDockWidget autohide on start

本文关键字:隐藏 启动 QDockWidget      更新时间:2023-10-16

我有一个QTDesigner对话框与QDockWidget作为主要小部件。当我将它停靠到主窗口并显示对话框时,自动隐藏自己,但允许我使用鼠标显示/隐藏它。我希望在默认情况下保持可见。如果我用鼠标调整它的大小,大约是屏幕大小的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);
        ....
    }
};

您想使QDockWidget隐藏时,窗口被创建,但然后切换显示或隐藏当你点击一个按钮的地方,或类似的东西?在setupUi方法中调用QDockWidget::hide(),然后在某处添加一个小切换按钮,当QDockWidget被切换时,该按钮会向它发送一个信号,告诉它是显示还是隐藏。

将q应用程序信号aboutToQuit()连接到dockwidget的SLOT,说onQuit:

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

SLOT应该看起来像:

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

。当关闭应用程序时,dock是隐藏的。如果你再次启动你的应用程序,QT将恢复CustomDock状态为隐藏