Qt5 Crash When Open File With QFileDialog
问题描述
在使用Qt的QFileDialog
这个类,来进行文件的打开和选择的时候, 就在调用的时候, 总是发生崩溃. 而且没有任何的提示性的信息. 而且崩溃的概率很高. 也有不崩溃的情况. 这个问题, 从我进入公司, 到现在一直是存在的.因为公司内部使用的是服务器模式的工作环境. 每个人通过终端链接服务器进行工作. 因为服务器环境复杂. 所以我们一直怀疑是权限问题,或者服务器问题. 而且我们也测试了其他机器. 在上面的是好好的,文件打开很正常.但就是除了服务器的环境. 所以这个问题就一直僵持着. 考验着开发人员的忍耐力.
问题分析
这个问题一直放着,没有去解决它. 主要是惯性思维的毛病. 一般的话, 我们调用这个打开文件对话框都是通过接口,设置几个参数.如果在调用接口的地方,出现问题了. 而且接口都是这么写的.着实让人头疼. 这个问题的实质, 就是调用系统资源文件管理器的时候, 出现的问题. 其实, 有的时候, 换一个思路, 问题就解决了. 为什么要调用系统的呢? 有其他的文件对话框吗? 对于Qt,是有的. 所以, 调用Qt自身的文件对话框, 可以根本的解决这个问题.
代码实现
/** 来自Net的一个写法, 主要注意QFileDialog::DontUseNativeDialog,
不要使用本地的对话框, 也就是使用Qt自身的对话框,打开文件 */
void MainWindow::StActOpenFile()
{
QStringList ltFilePath;
QFileDialog dialog(this, tr("Open Files"), qsLastPath,STR_OPEN_FILE);
dialog.setAcceptMode(QFileDialog::AcceptOpen); ///< 打开文件? 好像默认就是
dialog.setModal(QFileDialog::ExistingFiles);
dialog.setOption(QFileDialog::DontUseNativeDialog); ///< 不是用本地对话框
dialog.exec();
ltFilePath = dialog.selectedFiles();
return;
}
/** 项目中使用 */
void MainWindow::StActOpenFile()
{
QStringList ltFilePath;
ltFilePath = QFileDialog::getOpenFileNames( this,
tr("请选择至少一个图像文件"),
m_qsLastPath,
QString(STR_OPEN_FILE),
Q_NULLPTR,
QFileDialog::DontUseNativeDialog);
return;
}
void MainWindow::StActOpenFloder()
{
QStringList ltFilePath;
QString qsFileFloder = QFileDialog::getExistingDirectory(this,
tr("请选择一个图像文件夹"),
m_qsLastPath,
QFileDialog::ShowDirsOnly |
QFileDialog::DontUseNativeDialog );
return;
}
方案不足
使用这个方案, 因为是调用Qt本身提供的对话框, 语言是英文的. 不过, 我觉得这个是可以设置的. 原先的调用系统本身的, 语言环境是系统的. 所以不用考虑什么. 使用Qt自身的, 就要考虑这些了.有兴趣的童鞋可以自己研究一下. 使用自身的, 崩溃完美消失了.
Qt5 Crash When Open File With QFileDialog的更多相关文章
- QT5: QApplication, no such file or directory
In QT5, when I use this: #include<QApplication>, QT tells :no such file or directory, even tho ...
- Debug program crash with dump file.
1. Task manager, -> find the process for the program which crashed. 2. Right click the process -& ...
- Contents Of My Blogs
C++ How To Use Goto? Preprocessing Directive std::array std::deque std::forward_list std::map std::m ...
- Android怎样捕获应用的crash信息
转载请注明出处:http://blog.csdn.net/fishle123/article/details/50823358 我们的应用不可避免的会发生crash,假设是在调试阶段,我们能够使用Lo ...
- QT5 文件读写操作
QFile Class 1.read读文件 加载文件对象 QFile file("文件地址"); 打开加载的文件file.open(打开方式); 操作文件 关闭打开的文件file ...
- GUI学习之二十九—QFileDialog学习总结
今天学习的是文件对话框——QFileDialog 一.描述 QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录. QFileDia ...
- Total Commander 8.52 Beta 1
Total Commander 8.52 Beta 1http://www.ghisler.com/852_b1.php 10.08.15 Release Total Commander 8.52 b ...
- pyqt记录内容(音乐播放器)
#这是UI文件 # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'AudioPlayerDia ...
- [虚拟化/云] kvm的架构分析
预备知识 1. 客户机物理页框到宿主机虚拟地址转换 http://blog.csdn.net/zhuriyuxiao/article/details/8968781 http://www.tuicoo ...
随机推荐
- WebGL与three.js
前面学习了一些webgl的基础知识,现在就用一下three.js写一个小例子,记录一下学习的过程. 效果图: 1.去github下载three.js,然后将它加载到网页中 <script src ...
- iframe中positioin:fixed失效问题
页面中嵌套的iframe 内的 position:fixed元素定位失效fixed正常页面 此时position:fixed是根据浏览器窗口定位的,下拉一直位于左上角:以iframe形式嵌入后 此时p ...
- 【原】iOS学习之PINCache第三方缓存框架
在项目中总是需要缓存一些网络请求数据以减轻服务器压力,业内也有许多优秀的开源的解决方案.通常的缓存方案都是由内存缓存和磁盘缓存组成的,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化. 1.PINC ...
- IIS最大连接数优化
错误信息:Error Summary:HTTP Error 503.2 - Service UnavailableThe serverRuntime@appConcurrentRequestLimit ...
- [MySQL+PHP] 触发器及存储过程等MySQL功能在PHP中实现的坑
折腾了一下午,始终没有能搞定在PHP中编写事件. 因为业务需求,需要实现一个预操作的功能,即业务人员填写未来的某个要做某个操作.在这个日期到来之前,则一切照常. 想通过PHP编写MySQL Event ...
- 基于shell脚本比较数字大小
让用户输入两个数来比较他们的大小 先用touch命令新建一个1.sh文件 在用vi进入i进入编辑状态 输入 #!/bin/bash read "" a read "&qu ...
- MYSQL的安装
1.将mysql的安装文件放入虚拟机 2.搭建yum库 3.依次安装mysql的5个文件 最后一个server需要的依赖太多,所以用yum进行安装. 6.进行mysql的重置 mysql_instal ...
- 问题2: 安装cocoaPods出现的一系列问题
在新电脑上安装cocoaPods的时候,出现了一系列的问题,现在记录下来,方便查看 1.出现 Invalid mark letter (press RETURN) 解决方案:输入 :wq 即可 2. ...
- Ubuntu14.10搭建C++开发环境
方法一:1、安装Eclipsesudo apt-get install eclipse2、安装Eclipse CDTsudo apt-get install eclipse-cdt3、安装Autoto ...
- SElinux对一些服务关系的影响
kerberos 允许系统使用kerberos setsebool -P allow_kerberos 1 setsebool -P krb5kdc_disable_trans 1 service ...