1、mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMouseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
bool eventFilter(QObject *, QEvent *);
private:
Ui::MainWindow *ui;
};
#endif
2、mainwindows.c
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->progressBar->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *, QEvent *evt)
{
static QPoint lastPnt;
static bool isHover = false;
if(evt->type() == QEvent::MouseButtonPress)
{
QMouseEvent* e = static_cast<QMouseEvent*>(evt);
if(ui->progressBar->rect().contains(e->pos()) &&
(e->button() == Qt::LeftButton))
{
lastPnt = e->pos();
isHover = true;
}
}
else if(evt->type() == QEvent::MouseMove && isHover)
{
QMouseEvent* e = static_cast<QMouseEvent*>(evt);
int dx = e->pos().x() - lastPnt.x();
int dy=e->pos().y()-lastPnt.y();
ui->progressBar->move(ui->progressBar->x()+dx,ui->progressBar->y()+dy);
}else if(evt->type() == QEvent::MouseButtonRelease && isHover)
{
isHover = false;
}
return false;
}