使用Qt,如何使用鼠标向上或向左移动事件来调整小部件的大小
Using Qt, how do I resize a widget using the mouse move event going up or to the left
我有一个具有QWidget
的QMainWindow
。出现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
的计算是负数,因此窗口的大小调整不正确(或根本不正确)。
我意识到向上/向左移动意味着我需要更改小部件的原点,同时根据需要增加宽度/高度,使其右下角保持在同一位置,但我该如何做到这一点?
谢谢!
我会这样做:
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();
}
这是在没有编译器的情况下键入的。
顺便说一句,你可能还需要设置MouseTracking(true),这样,如果你的鼠标移动事件发生在小部件内,你的MyQMainWindow就可以处理它。我不确定这一点。
相关文章:
- 为char数组调整zlib-zpipe
- Android NDK传感器向事件队列报告奇怪的间隔
- 调整大小后指向元素值的指针unordered_map有效?
- 在C++中调整向量中的索引
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- Q调整大小事件
- 继承自定义选项卡栏和调整大小事件的实现
- 如何从类外监听小部件的调整大小事件
- 重新实现大小调整事件
- WxWidgets动态事件处理程序调整大小
- 使用Qt,如何使用鼠标向上或向左移动事件来调整小部件的大小
- 我可以在不手动调整Qt大小的情况下调用调整大小事件吗?
- 调整QGraphicsScene大小时发生的事件
- 如何处理列宽调整事件
- Qt用户调整大小事件结束(停止)
- 在SDL 2中获得连续的窗口大小调整事件
- 调整QT中从QWindow继承的另一个类中的事件大小