如何在Qt 5上的paintEvent上使用mouseMoveEvent? 我是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 ); } #包括“myimage.h” #包括 #包括 #包括 #包括 #包括 Myimage::Myimage(QWidget*parent):QWidget(parent) { setMouseTracking(true);//例如,在小部件的构造函数中设置。 } //在小部件中实现 void Myimage::mouseMoveEvent(QMouseEvent*事件) { qDebug()位置(); } void Myimage::paintEvent(QPaintEvent*事件) { 事件->接受(); QPixmap pixmap2(“/home/gabriel/Qt_interfaces/OpenCVTests/Webcam_PyQt5/Images/Court_top_View.jpg”); QRect矩形(0,0,宽度()-1,高度()-1); 油漆工(本); painter.drawRect(矩形); painter.drawPixmap(5,5,宽度()-10,高度()-10,pixmap2); 画家抽屉(位置(),10,10); }
鼠标位置正在控制台上打印,但图像上没有椭圆 你能帮我吗 问候, 加布里埃尔。根据: pos:QPoint 此属性保存小部件在其父级中的位置 小部件 如果小部件是一个窗口,则位置是窗口上小部件的位置 桌面,包括它的框架 访问功能: QPoint pos()const void 移动(整数x,整数y) 无效移动(常数点&) 当我们看到这些数据时,我们不需要它,一个可能的解决方案是创建一个变量,存储通过如何在Qt 5上的paintEvent上使用mouseMoveEvent? 我是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 ); } #包括“myimage.h” #包括 #包括 #包括 #包括 #包括 Myimage::Myimage(QWidget*parent):QWidget(parent) { setMouseTracking(true);//例如,在小部件的构造函数中设置。 } //在小部件中实现 void Myimage::mouseMoveEvent(QMouseEvent*事件) { qDebug()位置(); } void Myimage::paintEvent(QPaintEvent*事件) { 事件->接受(); QPixmap pixmap2(“/home/gabriel/Qt_interfaces/OpenCVTests/Webcam_PyQt5/Images/Court_top_View.jpg”); QRect矩形(0,0,宽度()-1,高度()-1); 油漆工(本); painter.drawRect(矩形); painter.drawPixmap(5,5,宽度()-10,高度()-10,pixmap2); 画家抽屉(位置(),10,10); },c++,qt,qt5,qpainter,qmouseevent,C++,Qt,Qt5,Qpainter,Qmouseevent,鼠标位置正在控制台上打印,但图像上没有椭圆 你能帮我吗 问候, 加布里埃尔。根据: pos:QPoint 此属性保存小部件在其父级中的位置 小部件 如果小部件是一个窗口,则位置是窗口上小部件的位置 桌面,包括它的框架 访问功能: QPoint pos()const void 移动(整数x,整数y) 无效移动(常数点&) 当我们看到这些数据时,我们不需要它,一个可能的解决方案是创建一个变量,存储通过QMouseEvent获得的位置值,并通过函数更新绘制,此外,第一次使用小部件时,应该没有椭圆,因
QMouseEvent
获得的位置值,并通过函数更新绘制,此外,第一次使用小部件时,应该没有椭圆,因此我们检查是否已通过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 );
}
}
根据报告:
pos:QPoint
此属性保存小部件在其父级中的位置
小部件
如果小部件是一个窗口,则位置是窗口上小部件的位置
桌面,包括它的框架
访问功能:
QPoint pos()const void
移动(整数x,整数y)
无效移动(常数点&)
当我们看到这些数据时,我们不需要它,一个可能的解决方案是创建一个变量,存储通过QMouseEvent
获得的位置值,并通过函数更新绘制,此外,第一次使用小部件时,应该没有椭圆,因此我们检查是否已通过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 );
}
}
你好@eyllanesc。我正在尝试从pyqt迁移到qt。你的解决方案再次帮助了我。非常感谢。我正在阅读一些C++教程,语言对我来说是新的,但我喜欢。在继续构建ui之前,我将阅读Qt的文档。谢谢你的提示。你好@eyllanesc。我正在尝试从pyqt迁移到qt。你的解决方案再次帮助了我。非常感谢。我正在阅读一些C++教程,语言对我来说是新的,但我喜欢。在继续构建ui之前,我将阅读Qt的文档。谢谢你的提示。