QDockWidget启动时自动隐藏

时间:2013-03-27 07:47:14

标签: c++ windows qt

我有一个QTDesigner对话框,其中QDockWidget作为主要小部件。当我将其停靠在主窗口并显示对话框时,会自动自动隐藏,但允许我使用鼠标显示/隐藏它。我想默认保持可见。 如果我使用鼠标将其大小调整为大尺寸,约为屏幕尺寸的2/3,并关闭对话框并稍后显示,即使我关闭了最后一个大尺寸的应用程序,它也能正常工作。

Theese是我的意思:

/** 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);
        ....
    }
};

2 个答案:

答案 0 :(得分:1)

您希望在创建窗口时隐藏QDockWidget,但是当您在某处单击按钮或某种类型时,切换显示或隐藏?在你的setupUi方法中调用QDockWidget :: hide(),然后在某个地方添加一个小的切换按钮,当它切换到QDockWidget时,它会告诉它是显示还是隐藏。

答案 1 :(得分:0)

将QTltion信号aboutToQuit()连接到你的dockwidget的SLOT上说onQuit:

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

SLOT应该如下:

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

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