Qt无故卡死关闭解决办法

关于Qt无故卡死崩溃的解决办法

网上找了很多原因,但是最终定位到的是显卡不兼容,只需要以下设置一下就行。

. 方法1:
查看本机是不是有启用“网易有道词典”,关闭即可,QT与其他软件冲突导致。

方法2:
删除~\AppData\Roaming\QtProject文件夹,然后再打开Qt Creator即可。
Linux下,~是/home/YourUserName
Windows下,~是C:\Users\YourUserName
这种方法治标不治本,我删了之后过段时间又卡死了。大家也可以尝试一下,注意这个文件夹是隐藏的,可以直接搜索找到。

方法3:
把QTcreator单独强制设置为集显就行了,这样全局依然可以选择高性能显卡。
在这里插入图片描述

### 解决 Qt 应用程序中 `exec` 函数导致程序卡死的方法 当使用 `QDialog::exec()` 方法时,该方法会启动一个新的事件循环并阻塞当前线程直到对话框关闭。这可能导致主界面卡死,尤其是在复杂操作或长时间运行的任务期间。 为了防止这种情况发生,推荐采用以下几种策略: #### 使用异步模式替代模态对话框 如果可能的话,尝试改用非模态窗口 (`show()`) 或者通过信号槽机制来处理用户交互而不是依赖于同步的 `exec()` 调用[^1]。 ```cpp // 替代 exec() dialog->setModal(false); dialog->open(); connect(dialog, &QDialog::finished, this, [=](int result){ // 处理完成后的逻辑 }); ``` #### 利用多线程技术分离耗时任务 对于那些确实需要等待返回结果但是又不想冻结 UI 的场景,则应该把实际工作放到独立的工作线程里去做,在主线程仅保留简单的显示控制部分[^4]。 ```cpp class Worker : public QObject { Q_OBJECT public slots: void process(){ // 执行耗时任务... emit finished(result); } signals: void finished(const QString &); }; Worker *worker = new Worker; QThread *thread = new QThread; worker->moveToThread(thread); connect(worker,&Worker::finished,this,[=](const QString& res){ qDebug()<<"Result:"<<res; }); connect(thread,SIGNAL(started()),worker,SLOT(process())); connect(worker,SIGNAL(finished(QString)),thread,SLOT(quit())); thread->start(); ``` #### 定期调用 `processEvents` 另一种临时性的办法是在长流程内部周期性地调用 `qApp->processEvents()` 来允许其他待处理的消息被及时分发给各个组件,但这并不是最佳实践因为可能会引入不可预测的行为[^5]. ```cpp for (int i = 0; i < largeNumber; ++i) { doSomeHeavyWork(i); QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } ``` 以上三种方式都可以有效地缓解由于 `exec()` 引起的应用响应迟钝现象,其中前两种更为推荐用于构建健壮稳定的桌面应用开发环境之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值