重写QDialog 的 void mousePressEvent(QMouseEvent *event)、 void mouseMoveEvent(QMouseEvent *event)、void mouseReleaseEvent(QMouseEvent *event) 三个函数,实现拖动QDialog标题栏移动QDialog的功能。
.h文件中定义如下成员变量
代码如下:
protected:
void showEvent(QShowEvent *);
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
private:
bool m_bMovable;
QPoint m_lastMousePos;
QLabel* m_pTitleLabel;
.cpp中代码入下:
void mousePressEvent(QMouseEvent *event)
{
QPoint point = event->pos();
QRect rect = m_pTitleLabel->rect();
if (rect.contains(point))
{
m_bMovable = true;
m_lastMousePos = event->globalPos();
}
else
{
m_bMovable = false;
}
}
void mouseMoveEvent(QMouseEvent *event)
{
if (m_bMovable)
{
move(event->globalPos() - m_lastMousePos + pos());
m_lastMousePos = event->globalPos();
}
}
void mouseReleaseEvent(QMouseEvent *event)
{
m_bMovable = false;
}