我正在尝试在Qt Creator中创建一个支持拖动对象的自定义小部件。在最简单的形式,小部件有一个QRect(或任何其他形状),我可以在其上单击,然后将其拖动到小部件周围。释放鼠标按钮后,QRect应该停止拖动。
在我的QWidget类中,我有这个方法
void ImageArea::mouseMoveEvent(QMouseEvent *event)
{
QPoint mousePos = event->pos();
qDebug() << mousePos.x();
qDebug() << mousePos.y();
qDebug() << "---------";
}
当指针在屏幕上移动时,可以获取鼠标的坐标。我尝试更新x和y的成员变量,然后通过paintEvent方法绘制QRect,但这不起作用。
有人有任何建议吗?
答案 0 :(得分:2)
要获取鼠标移动事件,必须将QWidget::mouseTracking属性设置为true:
ImageArea::ImageArea( QWidget* p ) : QWidget( parent ) {
...
setMouseTracking( true );
}
答案 1 :(得分:0)
实现paintEvent(QPaintEvent *)以在对应成员变量的当前值指示的位置绘制对象。
在更改了一个或多个成员变量的值(在mouseMoveEvent或其中)之后,请调用this-&gt; update()。这将告诉Qt它需要在不久的将来再次调用您的paintEvent方法。
这应该是你需要做的全部。
答案 2 :(得分:0)
请务必使用 moveTo 方法移动矩形。 直接设置x,y位置可能会影响矩形的大小。
根据你的问题,我根本不知道你做了什么。 你确定在绘制它们时矩形是否处于新位置?
也许你错过了Jeremy Friesner告诉实施的更新步骤。
您似乎缺少鼠标按钮跟踪。 简单的方法可能是从QApplication :: mouseButtons()获取鼠标按钮状态。虽然效率可能略低。