首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Qt 5上使用mouseMoveEvent在paintEvent上?

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

Stack Overflow用户
提问于 2017-07-22 00:15:56
回答 1查看 3.4K关注 0票数 0

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

代码语言:javascript
复制
#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 );
}

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

你能帮我一下吗?

致以敬意,

加布里埃尔。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-22 00:32:21

根据文档

pos : QPoint 此属性保持小部件在其父小部件中的位置。 如果小部件是一个窗口,那么它的位置就是桌面上小部件的位置,包括它的框架。 ..。 存取功能: QPoint pos() const void move(int x,int y) void (const QPoint &)

由于我们不想要这些数据,一个可能的解决方案是创建一个变量,该变量存储通过QMouseEvent获得的职位的值,并通过函数update()更新绘图,此外,当Widget第一次出现省略时,我们检查该位置是否已通过函数isNull() of QPoint分配,如下面所示:

*.h

代码语言:javascript
复制
private:
    QPoint mPoint;

*.cpp

代码语言:javascript
复制
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 );
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45248410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档