我的 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
的计算是否定的,因此窗口没有正确调整大小(或根本不调整大小) .
我意识到向上/向左移动意味着我需要更改小部件的原点,同时通过根据需要增加宽度/高度来保持小部件的右下角,但是我该怎么做?
谢谢!
1 回答
我会做这样的事情:
在没有编译器的情况下输入它 .
顺便说一下,你可能还需要setMouseTracking(true),这样如果你的鼠标移动事件发生在你的MyQMainWindow处理它的小部件内 . 我不确定那一点 .