我有一大块基于Qt的软件,可以在我们使用的所有现代机器上运行得很好。我们尝试在旧机器上运行已编译的软件,当我们尝试使用以下错误构建更大的场景时,软件崩溃:
程序中只有几个位置使用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
出现此类问题的原因是什么?可能与可用内存有关,因为它似乎在所有现代机器上都很好吗?有什么建议可以在这里完成吗?
答案 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();
}