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 ...
随机推荐
- jQuery九类选择器详解
(1)基本选择器 <body> <div id="div1ID">div1</div> <div id="div2ID" ...
- MIT 6.828 JOS学习笔记10. Lab 1 Part 3: The kernel
Lab 1 Part 3: The kernel 现在我们将开始具体讨论一下JOS内核了.就像boot loader一样,内核开始的时候也是一些汇编语句,用于设置一些东西,来保证C语言的程序能够正确的 ...
- Cookie 用法 小记
//保存cookie Cookie cookieName = new Cookie("name", realUser.getName()); Coo ...
- JS简单解决并发量
经常在写代码的时候碰到这样的场景:页面初始化时显示loading页,同时启动多个ajax并发请求获取数据,当每个ajax请求返回时结束loading. 举个例子,一个下订单的页面,要查询常用地址信息. ...
- Java EE之servlet处理表单提交的请求
1.在源包下新建一个Servlet页,取名为LoginServlet: package weinidingServlet; //该Servlet所 ...
- 《DSP using MATLAB》示例Example5.20
- Rdeis 详解 小白
Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-v ...
- 窗体Showmedol 遇到的奇怪异常-->进阶问题
procedure SetTransparentForm (popupFrm:TForm;Color:TColor;AlphaBlendValue:Integer); var FrmTranspare ...
- SpringMVC -- 注解
@Entity -- 实体类@Table(name = "hat_province", catalog = "news") -- 对应的表name -- 表名c ...
- linux下memcached安装以及启动
1. 准备安装文件 下载memcached与libevent的安装文件 http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz(me ...