Qt dockwidget 标题栏去掉关闭按钮,自定义双击操作

可以实现以下功能:

1. 隐藏了最大化最小化关闭等按钮

2. 可以自行修改标题栏中文字的位置类型等,标题栏的高度

3. dockwidget可以拖出来,双击就变全屏,再双击恢复原来的尺寸

4. 改程序实现了双屏或者多屏显示的时候,在指定的屏幕最大化

Qt dockwidget 标题栏去掉关闭按钮,自定义双击操作_第1张图片

 Qt dockwidget 标题栏去掉关闭按钮,自定义双击操作_第2张图片

 

头文件

#ifndef TITLEWIDGET_H
#define TITLEWIDGET_H

#include 
#include 

namespace Ui {
class titleWidget;
}

class titleWidget : public QWidget
{
    Q_OBJECT

public:
    explicit titleWidget(QWidget *parent = nullptr);
    ~titleWidget();

    QSize sizeHint() const override { return QSize(40, 40); }

    void mouseDoubleClickEvent(QMouseEvent *event) override;
private:
    Ui::titleWidget *ui;
};

#endif // TITLEWIDGET_H

执行部分

#include "titlewidget.h"
#include "ui_titlewidget.h"
#include 

titleWidget::titleWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::titleWidget)
{
    ui->setupUi(this);
    setStyleSheet("border:1px solid red;");
}

titleWidget::~titleWidget()
{
    delete ui;
}
#include "QDockWidget"
#include "QDesktopServices"
#include "QDesktopWidget"
void titleWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
    QDockWidget *w = (QDockWidget *)this->parentWidget();
    qDebug() << w->isFloating();

    if(w->isFloating()){
        static bool max = false;
        static QRect location = w->geometry();

        if (max) {
            w->setGeometry(location);

        } else {
            location = w->geometry();
            w->setGeometry(qApp->desktop()->availableGeometry(w->geometry().center()));
        }
        qDebug() << "double clicked" <

实现过程

    QDockWidget *dw = new QDockWidget;
    const QString name = "飞行轨迹";
    dw->setObjectName(name);
    dw->setWindowTitle(name);
    dw->setStyleSheet("border:1px solid blue;");
    dw->setMinimumWidth(50);
    dw->setMinimumHeight(50);
    dw->setWidget(new QTextEdit);
    dw->setWindowFlags(Qt::FramelessWindowHint |Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);


    QWidget *_titleWidget = new titleWidget;
    dw->setTitleBarWidget(_titleWidget);

你可能感兴趣的:(qt,c++,蓝桥杯)