QT 中paintEvent的问题

qq_41621832 2019-10-09 04:54:49
想要利用QT画一个雷达图,编写了如下的程序:
void RadarDlg::paintEvent( QPaintEvent * )
{
QPainter *painter = new QPainter(this);
painter->setRenderHint(QPainter::Antialiasing);
painter->setRenderHint(QPainter::SmoothPixmapTransform);
painter->setRenderHint(QPainter::TextAntialiasing);
drawRadarType(painter);
drawLabel(painter);
drawData(painter);
drawAxisLabel(painter);
}
但是运行时,会报警告:
QBackingStore::endPaint() called with active painter on backingstore paint device
QPaintDevice: Cannot destroy paint device that is being painted
然后给paintEvent加上begin()和end()
void CRadarDlg::paintEvent( QPaintEvent * )
{
QPainter *painter = new QPainter(this);
painter->begin (this);
painter->setRenderHint(QPainter::Antialiasing);
painter->setRenderHint(QPainter::SmoothPixmapTransform);
painter->setRenderHint(QPainter::TextAntialiasing);
drawRadarType(painter);
drawLabel(painter);
drawData(painter);
drawAxisLabel(painter);
painter->end ();
}
还是有警告:
QPainter::begin: Painter already active
请问该如何让解决?
...全文
1393 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MT_GH 2021-03-20
  • 打赏
  • 举报
回复
不要用指针就没问题
lingyunyicun 2021-03-04
  • 打赏
  • 举报
回复
QPainter p(this); 变成局部变量就好了
华木子薛 2020-08-12
  • 打赏
  • 举报
回复
这个不管用呀?楼主最后怎么解决的呢?求赐教。
  • 打赏
  • 举报
回复
引用 2 楼 qq_41621832 的回复:
[quote=引用 1 楼 这是一个正经昵称 的回复:] 试一下delete painter;painter=NULL;
试了一下,还是不行。[/quote]
QPainter* p = new QPainter;
    p->begin(this);
    p->setBrush(QBrush(QColor(222,222,123)));
    p->drawRect(0,0,10,20);
    p->end();
    delete p;
    p=NULL;
qq_41621832 2019-10-09
  • 打赏
  • 举报
回复
引用 1 楼 这是一个正经昵称 的回复:
试一下delete painter;painter=NULL;

试了一下,还是不行。
  • 打赏
  • 举报
回复
试一下delete painter;painter=NULL;

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧