我会做这样的事情:
void MyQMainWindow::updateWidgetGeometry()
{
if (_initial == QPoint(-1,-1)) {
return;
}
x = qMin(_initial.x(), _current.x());
y = qMin(_initial.y(), _current.y());
w = abs(_initial.x() - _current.x());
h = abs(_initial.y() - _current.y());
myQWidget.setGeometry(x, y, w, h);
}
void MyQMainWindow::mousePressEvent(QMouseEvent * E)
{
_initial = e->pos();
_current = e->pos();
updateWidgetGeometry()
myQWidget->show();
}
void MyQMainWindow::mouseMoveEvent(QMouseEvent * E)
{
_current= e->pos();
updateWidgetGeometry()
}
void MyQMainWindow::mouseReleaseEvent(QMouseEvent *)
{
_current = QPoint(-1,-1);
_initial = QPoint(-1,-1);
myQWidget.hide();
}
在没有编译器的情况下输入它 .
顺便说一下,你可能还需要setMouseTracking(true),这样如果你的鼠标移动事件发生在你的MyQMainWindow处理它的小部件内 . 我不确定那一点 .