在Designer中的Qt 5中隐藏/显示DockWidgets

时间:2014-12-02 16:04:41

标签: c++ qt qt5 qdockwidget

我正在使用Qt开发一个应用程序,这个框架对我来说并不熟悉,而且我试图隐藏并显示我使用设计器创建的DockWidget。

与Qt中隐藏和显示dockwidgets的许多看似相似的问题不同的是,我完全使用Qt Designer制作了我的小部件,因此我不知道如何链接我在以下找到的大部分代码。这些问题'答案。基本上,我没有在我的* .cpp文件中提到dockwidget,但是我的.ui文件中没有。

如何将此Designer创建的dockwidget合并到我的代码中以使其可见和不可见?

对于这样一个不起眼的问题感到抱歉。

谢谢, erip

1 个答案:

答案 0 :(得分:0)

Wenn您构建了应用程序,qmake从您的ui文件生成h。因此,例如ui_dlg_about.ui会自动翻译为ui_dlg_about.h。通常在文件夹中调用GeneratedFiles或类似的东西。然后,您可以通过创建以下内容创建一个可在应用程序中使用的实际可自定义对话框类:

<强> dlg_about.h

#include "ui_dlg_about.h"
#include <QDialog>

class dlg_about : public QDialog, protected Ui::ui_dlg_about
{
    Q_OBJECT

    public:
        dlg_about(QWidget* = 0);

    public slots:
        void toggle_dockwidget();
};

<强> dlg_about.cpp

#include "dlg_about.h"

dlg_about::dlg_about(QWidget* parent) : QDialog(parent)
{
    setupUi(this);

    QObject::connect(this->somebutton, SIGNAL(clicked()), this, SLOT(toggle_dockwidget()));
}

void dlg_about::toggle_dockwidget()
{
    if(something){
        this->dockwidget->setVisible(true);
    }else{
        this->dockwidget->setVisible(false);
    }
}

您的对话框也可能不是来自ui_dlg_about,而是将其作为成员:

<强> dlg_about.h

#include "ui_dlg_about.h"
#include <QDialog>

class dlg_about : public QDialog
{
    Q_OBJECT

    public:
        dlg_about(QWidget* = 0);

    public slots:
        void toggle_dockwidget();

    protected:
        Ui::ui_dlg_about ui;
};

<强> dlg_about.cpp

#include "dlg_about.h"

dlg_about::dlg_about(QWidget* parent) : QDialog(parent)
{
    setupUi(this->ui);

    QObject::connect(this->ui.somebutton, SIGNAL(clicked()), this, SLOT(toggle_dockwidget()));
}

....