头文件:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void mousePressEvent(QMouseEvent *event);//按下
void mouseMoveEvent(QMouseEvent *event);//移动
void mouseReleaseEvent(QMouseEvent *event);//抬起
private:
bool m_draging;//是否拖动
QPoint m_startPostion;//拖动前鼠标位置
QPoint m_framPostion;//窗体的原始位置
};
#endif // MAINWINDOW_H
源文件:
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_draging = false;//初始为false;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
m_draging = true;
if(event->buttons() & Qt::LeftButton)//只响应鼠标左键
{
m_startPostion = event->globalPos();
m_framPostion = frameGeometry().topLeft();
}
QWidget::mousePressEvent(event);//调用父类函数保持原按键行为
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
//offset 偏移位置
QPoint offset = event->globalPos() - m_startPostion;
move(m_framPostion + offset);
}
QWidget::mouseMoveEvent(event);//调用父类函数保持原按键行为
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
m_draging = false;
QWidget::mouseReleaseEvent(event);
}