如何在Qt 5上的paintEvent上使用mouseMoveEvent?

时间:2017-07-22 00:15:57

标签: c++ qt qt5 qpainter qmouseevent

我是Qt和c ++的新手,所以我遇到了一些困难。我试图创建一个可以获取mouseMoveEvent位置的小部件,并在鼠标位置上的pixmap上绘制一个椭圆。您可以在下面看到代码:

#include "myimage.h"
#include <QPainter>
#include <QPen>
#include <QColor>
#include <QMouseEvent>
#include <QDebug>

Myimage::Myimage(QWidget *parent) : QWidget(parent)
{
    setMouseTracking(true); // E.g. set in your constructor of your widget.
}



// Implement in your widget
void Myimage::mouseMoveEvent(QMouseEvent *event)
{
    qDebug() << event->pos();

}

void Myimage::paintEvent(QPaintEvent * event)
{
    event->accept();
    QPixmap pixmap2("/home/gabriel/Qt_interfaces/OpenCVTests/Webcam_PyQt5/Images/Court_top_View.jpg");

    QRect rectangle(0, 0, width()-1, height()-1);

    QPainter painter(this);
    painter.drawRect(rectangle);
    painter.drawPixmap(5, 5, width()-10, height()-10, pixmap2);


    painter.drawEllipse(pos(), 10 ,10 );
}

鼠标位置正在控制台上打印,但图像上没有椭圆。

你能帮帮我吗?

此致

加布里埃尔。

1 个答案:

答案 0 :(得分:2)

根据doc

  

pos:QPoint

     

此属性保存窗口小部件在其父窗口中的位置   窗口小部件。

     

如果窗口小部件是窗口,则位置是窗口小部件的位置   桌面,包括它的框架。

     

...

     

访问功能:

     

QPoint pos()const void

     

move(int x,int y)

     

void move(const QPoint&amp;)

正如我们所看到的那样,我们不想要它,一个可能的解决方案是创建一个变量来存储通过QMouseEvent获取的位置的值,并通过函数update()更新绘图,此外,第一次Widget不应该有椭圆,所以我们检查位置是否已通过isNull()的{​​{1}}函数分配,如下所示:

<强> *的.h

QPoint

<强> *。CPP

private:
    QPoint mPoint;