前面我写了一个关于Qt无标题窗口的移动,当初我为了实现窗体移动,用了一个frame看成标题栏,当鼠标在frame范围内移动,整个窗体就随着移动,现在不再采用frame,而是直接把鼠标放在窗体的标题栏的那个位置就移动,实现代码如下(代码和以前代码大致相同)
头文件:
private:
QPoint offset; //记录 获取鼠标位置与窗口位置的差值
bool m_bisMoveable; //判断鼠标是否放在无标题窗口栏的标题栏范围内
protected:
void virtual mousePressEvent(QMouseEvent *);
void virtual mouseMoveEvent(QMouseEvent *);
void virtual mouseReleaseEvent(QMouseEvent *);
源文件
#include <QMouseEvent>
在够造函数对m_bisMoveable初始化
m_bisMoveable = false;
void Dialog::mousePressEvent(QMouseEvent *event)
{
if(event->buttons() == Qt::LeftButton)
{
offset = event->globalPos() - pos();
QRect rect(0,0,this->size().width,27); //就是之前frame的大小
if(rect.contains(event->pos())
{
m_bisMoveable = true;
}
}
}
void Dialog::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons&Qt::LeftButton&&m_bisMoveable)
{
move(event->golbalPos() - offset);
}
}
void Dialog::mouseReleaseEvent(QMouseEvent *event)
{
if(m_bisMoveable)
{
m_bisMoveable = false;
}
}