在项目中,Qt原生的控件窗口风格是无法满足项目要求,因此需要自己封装特有的风格窗口,但是自己封装的窗口拖动标题栏是无法移动的,只能自己编写移动方法, 我自己是在弹窗最上面有个小QWidget:
1.自定义的类是继承QDialog或者QWidget
2.重写三个接口mousePressEvent(QMouseEvent* pEvent)、mouseReleaseEvent(QMouseEvent* pEvent)、mouseMoveEvent(QMouseEvent* pEvent)
3.分别在上面三个接口中实现窗口移动的功能
头文件中定义bool m_mouseClicked = false;
void MessageDialog::mousePressEvent(QMouseEvent* pEvent)
{
if (pEvent->button() == Qt::LeftButton)
{
auto winPos = ui->widget->pos();
auto mousePos = pEvent->pos();
if (winPos.x() <= mousePos.x() && winPos.y() <= mousePos.y()
&& (winPos.x() + ui->widget->width()) >= mousePos.x()
&& (winPos.y() + ui->widget->height()) >= mousePos.y())
{
m_firstPos = pEvent->globalPos() - pos();
m_mouseClicked = true;
}
}
QDialog::mousePressEvent(pEvent);
}
void MessageDialog::mouseReleaseEvent(QMouseEvent* pEvent)
{
if (pEvent->button() == Qt::LeftButton)
m_mouseClicked = false;
QDialog::mouseReleaseEvent(pEvent);
}
void MessageDialog::mouseMoveEvent(QMouseEvent* pEvent)
{
if (m_mouseClicked == true)
{
QPoint movePos = pEvent->globalPos();
move(movePos - m_firstPos);
}
QDialog::mouseMoveEvent(pEvent);
}