您的位置:首页 > 编程语言

无边框,窗口移动代码

2016-01-13 16:16 375 查看
本方法可以指定特定的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;
}


完事,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt C++ 移动