c++ - exec 出现段错误后更新主窗口标题
问题描述
如果我在 main.cpp 中调用 a.exec() 之后调用 MainWindow 函数 setWindowTitle,我会遇到段错误 (C000 0005)。gui运行后有什么方法可以更改窗口标题。我不相信这是 WIN 10 限制,因为我可以使用 tkinter 在 python 中执行此操作。我正在使用 qtcreator,但没有 QML 表单。
解决方案
您最有可能尝试使用已破坏的MainWindow
. 可能您错误地QT_WADeleteOnClose
在窗口上设置了属性。以下独立示例演示了此问题。该属性可能在.ui
文件中设置,您可能不知道。
// https://github.com/KubaO/stackoverflown/tree/master/questions/mainwindow-crash-double-delete-58305305
#include <QtWidgets>
class Window : public QMainWindow {
QWidget central;
QGridLayout layout{¢ral};
QLabel label{"Hello, World!"};
QCheckBox crash{"Crash on exit"};
public:
static bool alive;
Window() {
alive = true;
layout.addWidget(&label, 0, 0);
layout.addWidget(&crash, 1, 0);
setCentralWidget(¢ral);
connect(&crash, &QCheckBox::toggled, this, [this](){
setAttribute(Qt::WA_DeleteOnClose, crash.isChecked());
});
}
~Window() {
qDebug() << __FUNCTION__;
alive = false;
}
};
bool Window::alive;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
int rc;
{
Window w;
w.show();
rc = a.exec();
Q_ASSERT(w.alive);
w.setWindowTitle("A New Title Awaits");
qDebug() << "We're past w.setWindowTitle()";
}
return rc;
}
推荐阅读
- matlab - Matlab: perfcurve scores must be a vector of floating values
- angular - Angular cli未安装在Windows 10上
- gosu - Gosu for 循环遍历单列的行以进行日期检查
- angular - ngx-translate-core 无法翻译 ng-container 元素
- algorithm - 检查 3 个相同房间的单个会议室时间表可用性的方法或算法?
- django - 在视图中访问自定义用户模型的字段
- c# - 时间跨度自定义模型活页夹
- c# - 如何检查文件夹或文件是否被锁定、打开或正在使用
- c# - 在 SSIS 中访问 C# 中的 Excel 单元格
- c++ - C++ lambda 按值捕获语义和允许的优化