停靠窗口(dock window)是指一些可以停靠在QMainWindow中或是浮动为独立窗口的窗口。QMainWindow提供了4个停靠窗口区域:分别在中央窗口部件的上部、下部、左侧和右侧。诸如像Microsoft Visual Studio和Qt Linguist这样的应用程序都广泛使用了停靠窗口,以提供一种非常灵活的用户接口方式。在Qt中,各个停靠窗口都是QDockWidget的实例。每一个停靠窗口都有自己的标题栏,即使它处于停靠时也是如此。通过拖拽这一标题栏,用户可以把停靠窗口从一个停靠区域移动到另外一个停靠区域。通过把这个停靠窗口拖动到其他停靠区域的外面,就可以把停靠窗口从一个停靠区域中分离出来,让它成为一个独立的窗口。
如果想保存所有停靠窗口和工具栏的位置,以使下一次运行应用程序时能够恢复它们的值,那么可以使用QMainWindow的sayeState()和restoreState()函数
QDockWidget自定义标题栏关键代码:
QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this);
dock->setTitleBarWidget(new Titlebar(dock));//设置自定义标题栏
效果图

头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QHBoxLayout>
#include <QDockWidget>
#include <QMouseEvent>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void closeEvent(QCloseEvent *event) override;
private:
void writeSettings();
void readSettings();
};
class Titlebar : public QWidget {
//QWidget
Q_OBJECT
public:
Titlebar(QWidget* parent)
{
label_title = new QLabel( parent->windowTitle() );
label_title->setAlignment(Qt::AlignCenter);
label_title->setFixedHeight(20);
setStyleSheet("background:DarkSlateGray");
this->setWindowFlags(Qt::Window
| Qt::WindowMinimizeButtonHint
| Qt::WindowMaximizeButtonHint
| Qt::CustomizeWindowHint);
QHBoxLayout* layoutInner = new QHBoxLayout(this);
layoutInner->setSpacing(0);
layoutInner->setMargin(0);
layoutInner->addWidget(label_title);
}
protected:
// void mousePressEvent(QMouseEvent *event) override
// {
//
// }
// virtual void mouseReleaseEvent(QMouseEvent *event);
// virtual void mouseDoubleClickEvent(QMouseEvent *event);
// virtual void mouseMoveEvent(QMouseEvent *event);
signals:
public slots:
private:
QLabel* label_title;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include <QDockWidget>
#include <QChart>
#include

本文介绍了如何在Qt环境中使用QDockWidget创建可停靠窗口,并实现自定义标题栏。QMainWindow允许在四个方向停靠窗口,QDockWidget作为停靠窗口的实现,具有独立或停靠的功能。通过拖拽标题栏,用户可调整窗口位置。为了保存窗口和工具栏布局,可以利用QMainWindow的saveState()和restoreState()函数。此外,示例代码展示了如何创建包含图表的停靠窗口,并实现了多个停靠窗口的布局。
最低0.47元/天 解锁文章
441





