本方法可以指定特定的widget来响应拖动事件
直接上代码
这个是公共方法,判断鼠标是不是在指定widget内,
bool isMouseIn(const QWidget* a_widget)
{
QRect bottombar = a_widget->rect();
QPoint mouseP = a_widget->mapFromGlobal(QCursor::pos());
if (bottombar.contains(mouseP))
{
return true;
}
else
{
return false;
}
}
然后在 主窗口添加变量,和 3个鼠标虚函数;
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
private:
Ui::LingConClass ui;
bool canMove_;
QPoint startWindowPos_;
QPoint startCuserPos_;
void XXX::mousePressEvent(QMouseEvent *e)
{
startWindowPos_ = this->pos();
startCuserPos_ = QCursor::pos();
if (common_funs::isMouseIn(ui.topBar) || common_funs::isMouseIn(ui.bottomBar))
{
canMove_ = true;
}
}
void XXX::mouseMoveEvent(QMouseEvent *e)
{
if (canMove_) {
QPoint dirction = QCursor::pos() - startCuserPos_;
this->move(startWindowPos_ + dirction);
}
}
void XXX::mouseReleaseEvent(QMouseEvent *)
{
canMove_ = false;
}
完事,