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 ...
随机推荐
- webform中Session和Cookie对象的用法
Session: Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web页之间 ...
- MySLQ 为数据库远程授权的方法与问题的解决解决方法
Mysql通过远程的连接工具连接,提示Can't connect to MySQL server (10060). 这个时候我们需要分析,看哪里设置不当而导致的该问题. 工具/原料 mysql数 ...
- 使用Packet Sniffer抓包和分析(z-stack协议)
以下内容仅是自己学习总结,可能会有错误,有发现问题的欢迎指正(图片可以自己放大,还是比较清晰的). 1.协调器上电,其他设备均不上电,抓包如下: 通过观察可以发现,协调器建立网络成功后,会以15秒为周 ...
- hive学习笔记
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- 写给Git初学者的7个建议
[原文] - http://blog.jobbole.com/50603/ 当我刚刚开始使用Git的版本控制时,我根本不确定我付出那么多时间是不是会得到回报.Branch.Stage.Stash,这些 ...
- three.js立方体
<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - ge ...
- 2016-1-30 Servlet中Session管理(Sesssion追踪)
Session管理(Sesssion追踪)是Web应用程序开发中非常重要的一个主题.这是因为HTTP是无状态的,在默认情况下,Web服务器不知道一个HTTP请求是来自初次用户,还是来自之前已经访问过的 ...
- 介绍两个挺好用的基于Jquery的上传工具
一.ajaxFileUpload 二.fineUploader
- 【BZOJ】3997: [TJOI2015]组合数学
题意 \(N \times M\)的网格,一开始在\((1, 1)\)每次可以向下和向右走,每经过一个有数字的点最多能将数字减1,最终走到\((N, M)\).问至少要走多少次才能将数字全部变为\(0 ...
- C# 中对 ArrayList 的排序
ArrayList 元素 //目录条目类 public class FolderItem { public string filename; public string filetype; publi ...