目的,做一个如图的标题栏:
最终实现的效果图:
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
,mouse_press(false)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint); // 设置窗口标志
connect(ui->btnMin,&QPushButton::clicked,this,[=](){this->setWindowState(Qt::WindowMinimized);});
connect(ui->btnMax,&QPushButton::clicked,this,[=](){
if(this->isMaximized())this->setWindowState(Qt::WindowNoState);
else this->setWindowState(Qt::WindowMaximized);
});
connect(ui->btnClose,&QPushButton::clicked,this,[=](){this->close();});
}
Widget::~Widget()
{
delete ui;
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(mouse_press&&!this->isMaximized()){
move(event->globalPos() - mousePoint);
}
}
void Widget::mousePressEvent(QMouseEvent *event)
{
if( (event->button() == Qt::LeftButton) && ui->cMenuBar->geometry().contains(this->mapFromGlobal(QCursor::pos())) ){
mouse_press = true;
mousePoint = event->globalPos() - this->pos();
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
mouse_press = false;
}
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
if( (event->button() == Qt::LeftButton) && ui->cMenuBar->geometry().contains(this->mapFromGlobal(QCursor::pos())) ){
if(this->isMaximized())this->setWindowState(Qt::WindowNoState);
else this->setWindowState(Qt::WindowMaximized);
}
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event) override;
private:
Ui::Widget *ui;
QPoint mousePoint;
bool mouse_press;
};
#endif // WIDGET_H
ui设计器:
有一个难点,那个QMenuBar是怎么添加到UI设计器中:
1.先添加一个QWidget,然后编译一下,退出UI设计器;
2.用文本编辑软件,打开UI设计文件,把QWidget手动修改为QMenuBar,保存文件;
3.再次进行ui设计器,原先的QWidget部件就变成了QMenuBar部件了,然后在进行布局
版权声明:本文为a_1_1_1_2原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。