[英]How to use mouseMoveEvent on paintEvent on Qt 5?
我是 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)
無效移動(const QPoint &)
由於我們看到這個數據我們不想要它,一個可能的解決方案是創建一個變量來存儲通過QMouseEvent
獲取的位置的值,並通過函數update()
更新繪畫,另外第一次應該有的 Widget沒有橢圓,所以我們檢查位置是否已通過QPoint
的函數isNull()
分配,如下所示:
*。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 );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.