【问题标题】:QPainter device returned engine == 0, type: 3 (in re-defined paint() method)QPainter 设备返回引擎 == 0,类型:3(在重新定义的 paint() 方法中)
【发布时间】:2017-06-02 15:21:18
【问题描述】:

我有一大块基于 Qt 的软件,可以在我们使用的所有现代机器上正常运行。我们尝试在旧机器上运行编译后的软件,当我们尝试构建更大的场景时软件崩溃并出现以下错误:

程序中只有几个地方使用了QPainter,并且它在QStyledItemDelegate的继承类的重新定义的方法paint()中,例如:

virtual void paint(QPainter *painter, 
                   const QStyleOptionViewItem &option, 
                   const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);
    // ...
    QApplication::style()->drawControl(QStyle::CE_PushButtonLabel, &buttonDelete, painter);
}

问题是QPainter 出现此类问题的原因可能是什么?这是否与可用内存有关,因为它在所有现代机器上似乎都很好?有什么建议可以在这里做什么?

【问题讨论】:

    标签: c++ qt qpainter


    【解决方案1】:

    旧机器

    +

    当我们尝试构建更大的场景时软件崩溃

    = 很可能是内存不足。您可以安装一个内存不足处理程序以在发生这种情况时获得通知:

    #include <cstdio>
    #include <new>
    
    void my_new_handler()
    {
      printf("Memory allocation failed, terminating\n");
      std::set_new_handler(nullptr);
    }
    
    int main(int argc, char ** argv)
    {
      QApplication app(argc, argv);
      std::set_new_handler(my_new_handler);
      ...
      return app.exec();
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2013-01-24
      • 1970-01-01
      相关资源
      最近更新 更多