懂Qpainter的大虾进来看看喽~想请教一个问题,怎么在paintEvent外面使用paint绘图?

时间:2021-11-25 19:00:55
想请教一个问题,怎么在使用paint绘图?
我想做这样一个程序,用QLabel显示一幅图片,然后当鼠标点击图标某个点时,以这个点的R值和B值分别作为横坐标和纵坐标,将点(R,B)显示在右侧的坐标系里(坐标系已经建立),这里要用到一步:painter.drawPoint要在paintEvent外面使用,我将painter定义为类私有成员,运行程序总是出现:QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::drawPoints: Painter not active。如何解决这个问题呢?谢谢大家了

6 个解决方案

#1


QLabel label;
QPainter p(&label);
p.drawPoint...
是这样吧?

#2


啊,不好意思,我想起来自己也遇到过,好像是为了什么缓存设计成这样。
在QLabel内部声明一个数组,paintEvent函数负责把这个数组里面的图形绘制出来,当外部需要绘制时,就传入到这个数组里,然后QLabel.repaint()重绘

#3


QPainter只能在paintevent使用,否则会引起程序混乱。

比如你实现的是myWidget类,它继承了QWidget类。
你要重新实现paintEvent函数来实现绘图。

你用一个QPoint变量记录下鼠标的点击位置,然后再paintEvent中绘制或者显示就可以了。

#4


楼上,要是写了一个drawer类继承了QWidget类,可是我要在另外一个类中新建了一个widget,要使这个widget具有drawer的功能我该怎么把他们联系起来!求解……

#5


类继承和类组合的关系,
你的drawer类是继承QWidget类的,另外一个类新建widget又需要drawer类的功能,可以使用类组合。

#6


该回复于2011-04-21 14:34:49被版主删除

#1


QLabel label;
QPainter p(&label);
p.drawPoint...
是这样吧?

#2


啊,不好意思,我想起来自己也遇到过,好像是为了什么缓存设计成这样。
在QLabel内部声明一个数组,paintEvent函数负责把这个数组里面的图形绘制出来,当外部需要绘制时,就传入到这个数组里,然后QLabel.repaint()重绘

#3


QPainter只能在paintevent使用,否则会引起程序混乱。

比如你实现的是myWidget类,它继承了QWidget类。
你要重新实现paintEvent函数来实现绘图。

你用一个QPoint变量记录下鼠标的点击位置,然后再paintEvent中绘制或者显示就可以了。

#4


楼上,要是写了一个drawer类继承了QWidget类,可是我要在另外一个类中新建了一个widget,要使这个widget具有drawer的功能我该怎么把他们联系起来!求解……

#5


类继承和类组合的关系,
你的drawer类是继承QWidget类的,另外一个类新建widget又需要drawer类的功能,可以使用类组合。

#6


该回复于2011-04-21 14:34:49被版主删除