问题现象
- 调用QFileDialog的静态函数(比如getFileName)在客户环境下会有随机崩溃现象,无法捕获异常,也没有任何提示信息。
- 根据网页资料 https://www.cnblogs.com/zi-xing/p/6217172.html 推测,怀疑是静态函数调用的系统资源文件管理器跟某些软件冲突导致。解决方法就是使用QT封装的文件对话框代替系统资源文件管理器。
解决方法
简单写法
- 静态函数调用的时候设置参数:Options options( QFileDialog::DontUseNativeDialog ),意思就是不使用系统资源文件管理器。这样代码代码改动最小,但是有2个缺点:
- 默认样式带问号,不美观
- 选择保存路径的时候,不自动添加文件后缀,使用不方便
复杂写法
- 自定义文件对话框类FileDialogEx,继承QFileDialog。
- 构造函数中设置对话框属性样式,取消问号
- 封装对应的静态接口
- 选择保存路径的时候,自动添加文件后缀
对话框样式属性设置
FileDialogEx::FileDialogEx(QWidget *parent /*= nullptr*/,
const QString &