经过我的测试,产生此中问题的有以下两个原因:
1、没有在QPainterEvent中绘图,而是在其他处。(如果想在其他处实现绘图操作,建议使用双缓冲机制进行绘制,
先把图形绘制到QPixmap中,然后调用update()函数,系统就会自动调用QPainterEvent虚函数,所以只需要继承QWidget,
然后重写其PainterEvent函数即可,双缓冲机制详情见我写的文章:Qt绘图双缓冲机制)
2、第二种原因是我自己测试出来的,当用QPainter对象在其begain()函数之前调用setpen()就会出现此错误,而在begain和end
函数之间调用setpen函数此错误就会消失。
注意:经过我的测试,多次为一个QPainer对象设置同一个pen并不会造成此种现象的产生。
虽然定义了
Qpainter
绘画对象,但是并没有将其关联到绘画设备。因此提示
Paint
er
没有激活,如下图:
如果绘图设备是当前的Widget,直接在创建对象时绑定绘图设备,即可。
重新绑定绘图设备,界面就显示出来了。
QWidget::
paint
Engine: Should no long
er
be called
QPainter
::begin:
Paint
device returned engine == 0, type: 1
QPainter
::
set
Pen
:
Paint
er
not
active
QPainter
::
set
Pen
:
Paint
er
not
active
QPainter
::end:
Paint
er
not
active
, aborted
QWidget::
paint
En
Qt的绘图系统允许使用相同的API在屏幕和其他打印设备上进行绘制,整个绘图系统基于
QPainter
、Q
Paint
Device和Q
Paint
Engine三个类。
**
QPainter
用来执行绘制操作,Q
Paint
Device是一个抽象的二维空间,这个抽象的二维空间允许
QPainter
在上面进行绘制,也就是
QPainter
的工作空间。Q
Paint
Engine为
QPainter
提供了在不同设备上进行绘制的接口**。
Q
Paint
Engine类应用于
QPainter
和Q
Paint
Device之间,通常对开发
Qt QAbstractScrollArea子类出现"
Paint
er
not
active
"的一种原因
偶然,qt界面程序启动后,切换界面qt应用程序总是输出以下信息:
QPainter
::begin:
Paint
device returned engine == 0, type: 1
QPainter
::
set
Rend
er
Hint:
Paint
er
must be
active
to
set
...
最近在开发软件的时候一直报这个错,影像中
QPainter
也是可以在
paint
Event外面使用的,为什么会这样呢,于是经过一番调试才发现QImage在创建的时候size大小为0,所以才会报上面的错误,修正后就没错了,特此记录一下
附QT在QImage上绘图的代码
QImage m_shade;
m_shade = QImage(100,100, QImage::Format_ARGB32/*_Premultiplied*/);
QPainter
p(&m_shade);
最近学习Qt 自定义绘画时碰到两个
问题
,
问题
如下:
自定义绘画图形,采用重写Q
Paint
Event,发现绘画不起作用;
1、
Qpainter
不刷新,
解决
方法:在触发刷新是,调用updata()函数强行更新。
其中
Qpainter
的父类应该是具体绘画的widget;
对于QGraphiscView:我所碰到的
问题
如下:
QPainter
::fillPath:
Paint
er
not
active
QPainter
::
set
Pen
:
Paint
er
not
active
QPainter
::r
QWidget::
paint
Engine: Should no long
er
be called
QPainter
::begin:
Paint
device returned engine == 0, type: 1
QPainter
::
set
Pen
:
Paint
er
not
active
QPainter
::drawPoints:
Paint
er
not
active
运用想要使用
QPainter
绘图时,运行时出现如上所示错误,原因如下:
因为QT不像MFC在什么时间都可以绘图,使用
QPainter
画图,就要继承QWidget,重写p
paint
Event()虚函数,在里面进行绘图。
如果要在其他地方绘制图形,可以考虑绘制到QImage或者QPixmap上面,然后在
paint
Event()里面调用
QPainter
的绘制图像的
目录写在前面开发经验界面切换Qt信号槽传递参数Qt随机数的生成Qt绘图相关
问题
总结The code model could not parse an included file.程序异常结束ASS
ER
T failure in QList::at: "index out of range"
QPainter
::
set
Pen
:
Paint
er
not
active
毕设选题时,我选择了Qt编程开发相关的题目。一是很早就想选择编程主题的毕设,二是不太喜欢本专业的内容。因为相关基础知识的薄弱,我在使用基