+ QFile f(stacktrace_outfile);
+ f.open(QFile::ReadOnly | QFile::Text);
+ QTextStream fs(&f);
+ QString stacktrace = fs.readAll();
+ stacktrace = stacktrace.trimmed().replace('\n', "<br />");
+
+ qDebug() << QObject::tr("Stack trace of previous crash:");
+ qDebug() << "---------------------------------------------------------";
+ // Note: qDebug() prints quotation marks for QString output, so we feed it char*
+ qDebug() << stacktrace.toLocal8Bit().data();
+ qDebug() << "---------------------------------------------------------";
+
+ f.close();
+
+ // Remove stack trace so we don't process it again the next time we run
+ QFile::remove(stacktrace_filename.toLocal8Bit().data());
+
+ // Show notification dialog if permitted
+ pv::GlobalSettings settings;
+ if (settings.value(pv::GlobalSettings::Key_Log_NotifyOfStacktrace).toBool()) {
+ QCheckBox *cb = new QCheckBox(QObject::tr("Don't show this message again"));
+
+ QMessageBox msgbox;
+ msgbox.setText(QObject::tr("When %1 last crashed, it created a stack trace.\n" \
+ "A human-readable form has been saved to disk and was written to " \
+ "the log. You may access it from the settings dialog.").arg(PV_TITLE));
+ msgbox.setIcon(QMessageBox::Icon::Information);
+ msgbox.addButton(QMessageBox::Ok);
+ msgbox.setCheckBox(cb);
+
+ QObject::connect(cb, &QCheckBox::stateChanged, [](int state){
+ pv::GlobalSettings settings;
+ settings.setValue(pv::GlobalSettings::Key_Log_NotifyOfStacktrace,
+ !state); });
+
+ msgbox.exec();