QPainter设备返回引擎== 0,键入:3(在重新定义的paint()方法中)

时间:2017-06-02 15:21:19

标签: c++ qt qpainter

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

error log figure

程序中只有几个位置使用QPainter,并且它位于继承类paint()的重定义方法QStyledItemDelegate内,例如:

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出现此类问题的原因是什么?可能与可用内存有关,因为它似乎在所有现代机器上都很好吗?有什么建议可以在这里完成吗?

1 个答案:

答案 0 :(得分: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();
}