可以实现以下功能:
1. 隐藏了最大化最小化关闭等按钮
2. 可以自行修改标题栏中文字的位置类型等,标题栏的高度
3. dockwidget可以拖出来,双击就变全屏,再双击恢复原来的尺寸
4. 改程序实现了双屏或者多屏显示的时候,在指定的屏幕最大化
头文件
#ifndef TITLEWIDGET_H
#define TITLEWIDGET_H
#include <QWidget>
#include <QMouseEvent>
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 <QDebug>
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" <<max;
max = !max;
}
}
实现过程
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);