最近要实现无标题窗口的移动这个功能,以前就写过这个,所以为了让大家参考,我现在把关键功能代码晒晒
在你源码的头文件中定义两个成员变量和mouseMoveEvent(QMouseEvent *),mousePressEvent(QMouseEvent *),mouseReleaseEvent(QMouseEvent *)的重写
bool m_isMoveable;
QPoint dragPosition;
在构造函数中对m_isMoveable初始化
m_isMoveable = false;
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons&&Qt::LeftButton&&m_isMoveable)
{
move(event-globalPos() - dragPosition);
}
}
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button == Qt::LeftButton)
{
dragPosition = event->globalPos() - frameGeometry().topLeft();
QRect rect = this->ui->frame->frameRect(); //由于没有标题栏,所以我用frame作为标题栏
if(rect.contains(event->pos()))
{
m_isMoveable = true;
}
event->accept();
}
}
void Widget::mouseReleaseEvent(QMouseEvent *)
{
if(m_isMoveable)
m_isMoveable = false;
}
整个功能代码就写完了,这样你就可以实现无标题窗口的移动