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();
 
}

参考:

自制标题栏的拖放(Qt)

http://blog.zzjin.net/自制标题栏的拖放qt/

http://blog.zzjin.net/2011/06/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值