我在自定义框架中有一个标签。
我正在尝试在 MouseEvent 上移动整个应用程序:
void settingslogolabel::mouseMoveEvent(QMouseEvent *ev)
{
if ((ev->buttons() & Qt::LeftButton) && firstCIsNotNull){
window()->move( mapToGlobal(ev->pos() - m_dragPosition - this->geometry().topLeft()));
}
}
但!this->geometry()仅返回局部几何。
其实是一个问题——如何接收全局几何()?
小部件位于父级的坐标处。窗口位于全局坐标中。那些。您需要将父坐标转换为全局坐标:
另一方面,小部件的原点是它的左上角,即 他的位置。然后你可以简化:
QMouseEvent::pos()返回接收小部件的坐标位置。如果你想通过 ev->pos() 和 m_dragPosition 之间的差异来移动窗口,那就是需要移动的窗口,即 您需要更改其在全局坐标中的位置。那么逻辑如下:考虑到普通的widget不支持缩放,所以不需要调用mapToGlobal,只需要通过ev->pos()和m_dragPosition之间的差异进行移位即可。