gpt4 book ai didi

c++ - Qt5 应用程序在关闭时崩溃 (QWidget::show)

转载 作者:行者123 更新时间:2023-11-30 03:59:47 53 4
gpt4 key购买 nike

所以我一直被这个问题困扰了一段时间。出于某种原因,我的应用程序总是在关闭时崩溃,这是我收到的错误消息:

The inferior stopped because it triggered an exception.

Stopped in thread 0 by: Exception at 0x50c15a08, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)

堆栈显示如下:

QWidget::show Line: 7030

这是我的 main.cpp 目前的样子:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

我不知道为什么会发生崩溃。

一些背景知识:这是一个多线程应用程序(同时使用 QThread 和 QtConcurrent)。当线程未启动时,应用程序关闭就好了。因此,我添加了以下检查以确保线程被正确终止,但这没有帮助:

    void MainWindow::closeEvent(QCloseEvent *event)
{
if (thread->isRunning()) {
thread->terminate();
while(!thread->isFinished()){
}
event->accept();
}
}

编辑:如何创建新线程

QThread *myThread = new QThread(this);
Worker *worker = new Worker(this, user, p);
worker->moveToThread(myThread);

connect(myThread, SIGNAL(started()), worker, SLOT(doWork()));
connect(worker, SIGNAL(workDone()), this, SLOT(deleteThread()));
myThread->start();

...这就是我在下载完成后处理线程删除的方式:

void MainWindow::deleteThread(){
worker->deleteLater();
myThread->quit();
while(!myThread->isFinished()){
}
myThread->deleteLater();
}

最佳答案

您应该监听来自线程的终止信号或等待线程终止。告诉线程终止不会阻塞,因此如果您随后立即接受关闭事件,您将得到异常。

这在 terminate slot 的文档中有更详细的描述。

关于c++ - Qt5 应用程序在关闭时崩溃 (QWidget::show),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748454/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com