在设计器的Qt 5中隐藏/显示DockWidgets

Hiding/Showing DockWidgets in Qt 5 in Designer

本文关键字:隐藏 显示 DockWidgets Qt      更新时间:2023-10-16

我正在使用Qt开发一个应用程序,这是一个我根本不熟悉的框架,我正在尝试隐藏和显示我使用设计器创建的DockWidget。

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

如何将这个设计器创建的 dockwidget 合并到我的代码中,使其可见和不可见?

对不起,这样的菜鸟问题。

谢谢埃里普

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

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