1、 實例需求
移動無邊框窗體。
2、 實例實現
第一步:打開mainwindow.h頭文件,添加代碼。
<1> 添加頭文件:
#include <QMouseEvent> //引用鼠標類頭文件
#include <QPushButton> //引用按鈕類頭文件
<2> 添加變量和聲明:
//定義鼠標三種狀態方法
protected:
//鼠標按下
void mousePressEvent (QMouseEvent *e);
//鼠標移動
void mouseMoveEvent (QMouseEvent *e);
//鼠標釋放
void mouseReleaseEvent (QMouseEvent *e);
//定義QPoint對象
private:
QPushButton *btClose;
QPoint last;
第二步:打開mainwindow.cpp源代碼文件,添加代碼。
<1> 在MainWindow的構造函數中添加如下代碼:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//標題名
this->setWindowTitle("移動無邊框窗體");
//去掉標題欄
this->setWindowFlags(Qt::FramelessWindowHint);
//實例一個按鈕控件,因爲去掉標題欄後,窗體沒有關閉按鈕了。
//所以自己添加一個按鈕實現關閉功能。
btClose = new QPushButton(this); btClose->setText("關閉");
//按鈕點擊事件
connect(btClose,SIGNAL(clicked()),this,SLOT(close()));
}
<2> 實現函數:
//獲取鼠標點定位窗體位置
void MainWindow::mousePressEvent(QMouseEvent *e)
{
last = e->globalPos();
}
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
int dx = e->globalX() - last.x();
int dy = e->globalY() - last.y();
last = e->globalPos();
move(x()+dx,y()+dy);
}
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
int dx = e->globalX() - last.x();
int dy = e->globalY() - last.y();
move(x()+dx, y()+dy);
}
3、 效果圖
今天講解到現在結束了,想進行視頻學習的小夥伴,可以進入我的視頻教程進行學習,課程地址:https://edu.csdn.net/course/detail/7275,課程資源下載地址:https://download.csdn.net/download/xuan_xuan_2/10641564,歡迎大家前來學習交流。