我有一个 QMainWindow
,里面包含一个 QWidget
。这个 QWidget
出现,并且在 QMainWindow
的鼠标按下事件中设置其原点。然后,在 QMainWindow
的鼠标移动事件中,设置 QWidget
的几何形状,使得用户看起来像在 QMainWindow
上绘制一个矩形。以下是我的实现方式:
void MyQMainWindow::mousePressEvent(QMouseEvent * E) {
QPoint pos = e->pos();
myQWidget->setGeometry(pos.x(), pos.y(), 0, 0);
myQWidget->show();
}
void MyQMainWindow::mouseMoveEvent(QMouseEvent * e) {
QPoint pos = e->pos();
QPoint prv = myQWidget->pos();
int w = pos.x() - prv.x();
int h = pos.y() - prv.y();
myQWidget.setGeometry(prv.x(), prv.y(), w, h);
}
void MyQMainWindow::mouseReleaseEvent(QMouseEvent *) {
myQWidget.hide();
}
这种方法的问题在于,当我向上或向左拖动鼠标时,我的
w
和h
计算结果为负数,因此窗口无法正确(或根本)调整大小。我意识到,向上/向左移动意味着我需要改变小部件的原点,同时通过根据需要增加宽度/高度来保持其右下角位置不变,但我该如何实现呢?
谢谢!