QDockWidget自定义标题栏

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

停靠窗口(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 
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值