在Qt

中的QWidget周围拖动对象 我正在尝试在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,但这不起作用。 有没有人有什么建议?     
已邀请:
要获取鼠标移动事件,必须将QWidget :: mouseTracking属性设置为true:
ImageArea::ImageArea( QWidget* p ) : QWidget( parent ) {
    ...
    setMouseTracking( true );
}
    
实现paintEvent(QPaintEvent *)以在对应的成员变量的当前值指示的位置绘制对象。 在更改了一个或多个成员变量的值(在mouseMoveEvent或其中)之后,请调用this-> update()。这将告诉Qt它需要在不久的将来再次调用您的paintEvent方法。 这应该就是你需要做的。     
请务必使用moveTo方法移动矩形。 直接设置x,y位置可能会影响矩形的大小。 根据你的问题,我看不到你在做什么。 你确定在绘制它们时矩形是否处于新的位置? 也许你错过了Jeremy Friesner告诉实施的更新步骤。 您似乎缺少鼠标按钮跟踪。 简单的方法可能是从QApplication :: mouseButtons()获取鼠标按钮状态。虽然效率可能略低。     

要回复问题请先登录注册