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



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

#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 );
}

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

你能帮我吗?

问候

加布里埃尔。

根据文档:

位置 : QPoint

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

如果小部件是一个窗口,则位置是小部件在 桌面,包括其框架。

访问功能:

QPoint pos(( const void

移动(int x, int y(

空移(常量 QPoint &(

当我们看到这些数据时,我们不想要它,一个可能的解决方案是创建一个变量,该变量存储通过QMouseEvent获得的位置的值,并通过函数update()更新绘画,此外,第一次 Widget 不应该有椭圆,所以我们检查位置是否已通过函数isNull()分配QPoint, 如下所示:

*.h

private:
QPoint mPoint;

*。.cpp

Myimage::Myimage(QWidget *parent)
: QWidget(parent)
{
setMouseTracking(true);
}
void Myimage::mouseMoveEvent(QMouseEvent *event)
{
mPoint = event->pos();
update();
}
void Myimage::paintEvent(QPaintEvent *)
{
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);
if(!mPoint.isNull()){
painter.drawEllipse(mPoint, 10 ,10 );
}
}

相关内容

  • 没有找到相关文章

最新更新