QT>自定义标题栏拖放/最大化/最小化/关闭窗口功能实例源码介绍



QT>自定义标题栏拖放/最大化/最小化/关闭窗口功能实例源码介绍。要想做出好看的界面,qt自带的标题栏必须摒弃。

以下是两种去掉标题栏的方式:

 

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

this->setWindowFlags(Qt::FramelessWindowHint);//去掉窗口标题栏方式1
//this->setWindowFlags(Qt::X11BypassWindowManagerHint); //去掉窗口标题栏2
}

简单的代码列在下面:

MainWindow.h


 

private slots:
void on_actionMinimize_triggered();//最小化窗口
void on_actionClose_triggered();//关闭窗口
protected:
//自己重新实现拖动操作
void mouseMoveEvent ( QMouseEvent * event );
void mousePressEvent ( QMouseEvent * event );
void mouseReleaseEvent(QMouseEvent *);
private:
//自己重新实现拖动操作
QPoint mousePosition;
bool isMousePressed;

实现代码:MainWindow.cpp

#include //自己实现的窗口拖动操作
#include //鼠标事件

//标题栏的长度
const static int pos_min_x = 0;
const static int pos_max_x = 800-40;
const static int pos_min_y = 0;
const static int pos_max_y = 20;
//自己实现的窗口拖动操作
void MainWindow::mousePressEvent(QMouseEvent *event)
{
mousePosition = event->pos();
//只对标题栏范围内的鼠标事件进行处理
if (mousePosition.x()<=pos_min_x)
return;
if ( mousePosition.x()>=pos_max_x)
return;
if (mousePosition.y()<=pos_min_y )
return;
if (mousePosition.y()>=pos_max_y)
return;
isMousePressed = true;
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if ( isMousePressed==true )
{
QPoint movePot = event->globalPos() – mousePosition;
move(movePot);
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
isMousePressed=false;
}

void MainWindow::on_actionMinimize_triggered()
{
//系统自定义的最小化窗口函数
showMinimized();
//最大化 showMaximized();
}
void MainWindow::on_actionClose_triggered()
{
//系统自定义的窗口关闭函数
close();
}