在paintEvent中创建两个QPainters

时间:2013-02-11 18:18:29

标签: c++ qt warnings

这是主程序的小例子:

void Widget::paintEvent(QPaintEvent *){
    QPainter *painter1 = new QPainter(this);
    QPainter *painter2 = new QPainter(this);

    delete painter1;

    painter2->drawLine(50,50,200,100);     
}

崩溃了。如果删除最后一行,我会收到以下警告消息:

  

QPaintDevice:无法销毁正在绘制的绘图设备

2 个答案:

答案 0 :(得分:2)

QPainter对象与QPaintDevice相关联。在下面第三个链接的注释中,它讨论了QPainter上下文中QWidget::paintEvent()对象的生命。

http://qt-project.org/doc/qt-4.8/qpainter.html#details

http://qt-project.org/doc/qt-4.8/paintsystem.html

http://qt-project.org/doc/qt-4.8/qpainter.html#QPainter-2(第三个链接)

答案 1 :(得分:1)

为了澄清 phyatt 所说的一点,为了避免这个错误你应该添加到你的代码中:

painter2->end();

绘制线后。
我还没有测试过,但我认为添加这行代码可以帮助你。