• 1303阅读
  • 7回复

[讨论]Qt QFileDialog::getSaveFileName响应慢 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2022-04-28

如题,在一个QPushButton点击事件的槽函数里添加一个如下的接口:
  1. void CustomDialog::onClickedBtnExportXls()
  2. {
  3.     QString fileName = QFileDialog::getSaveFileName(this, QString("另存为"), "", tr("All Files (*.csv)"));
  4.     qWarning()<<"fileName="<<fileName;
  5.     if (!fileName.isNull())
  6.     {
  7.         QFile file;
  8.         file.setFileName(fileName);
  9.         if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
  10.         {
  11.             qWarning()<<"open failed!";
  12.             return;
  13.         }
  14.         QTextStream out(&file);
  15.         out<<QString("ID")<<",";
  16.         out<<QString("姓名")<<",";
  17.         out<<QString("性别")<<",";
  18.         out<<QString("年龄")<<",";
  19.         out<<QString("年纪")<<",";
  20.         out<<QString("成绩")<<",";
  21.         out<<QString("住址")<<",";
  22.         out<<"\n";
  23.         for(int i=0; i < m_StudentInfoList.count(); ++i)
  24.         {
  25.             STudentInfo info = m_StudentInfoList.at(i);
  26.             out<<info.strIdx<<",";            
  27.             out<<info.strName<<",";
  28.             out<<info.strSex<<",";
  29.             out<<info.strAge<<",";
  30.             out<<info.strNum<<",";
  31.             out<<info.strScore<<",";
  32.             out<<info.strAddress<<",";
  33.             out<<"\n";
  34.         }
  35.        file.close();
  36.        return;
  37.     }
  38. }


如上在点击按钮时,发现鼠标会转圈,等一会才会响应,并显示QFileDialog::getSaveFileName这个对话框。请问为什么QFileDialog::getSaveFileName会响应那么慢,正常情况下不应该是点击按钮后,就会很快显示出对话框吗?请问各位大佬,这个问题应该怎么优化或解决呢?欢迎各位大佬指点一下,小弟感激不尽!


在线spygg

只看该作者 1楼 发表于: 2022-04-28
因为选择文件的时候会尝试兼容网络文件上的文件,传参时候加上Qt::AA_DontUseNativeDialogs 好像就行了
签名就是这么浪
离线lwei24

只看该作者 2楼 发表于: 2022-04-29
回 spygg 的帖子
spygg:因为选择文件的时候会尝试兼容网络文件上的文件,传参时候加上Qt::AA_DontUseNativeDialogs 好像就行了 (2022-04-28 21:35) 

请问你说的这个参数Qt::AA_DontUseNativeDialogs 是要在哪里设置呢?
离线meteorliu

只看该作者 3楼 发表于: 2022-04-29
可以试下行不,或者是不是电脑太老了
QString fileName = QFileDialog::getSaveFileName(this, QString("另存为"), "", tr("All Files (*.csv)"), Q_NULLPTR, QFileDialog::ShowDirsOnly);
Best Regards
离线lwei24

只看该作者 4楼 发表于: 2022-04-29
回 meteorliu 的帖子
meteorliu:可以试下行不,或者是不是电脑太老了
QString fileName = QFileDialog::getSaveFileName(this, QString("另存为"), "", tr("All Files (*.csv)"), Q_NULLPTR, QFileDialog::ShowDirsOnly); (2022-04-29 11:42) 

的确,现在win7 专业版的service pack1。刚刚试了你说的方法,对比和之前差不多,也是点击按钮,然后鼠标会转圈,等一下就出来了。一般情况下,不是有阻塞事件的时候才会出现时间等待吗?但只是点击按钮打开一个保存对话框,它怎么也会有这种现象呢?又没有用到线程……
在线spygg

只看该作者 5楼 发表于: 2022-05-02
回 lwei24 的帖子
lwei24:请问你说的这个参数Qt::AA_DontUseNativeDialogs 是要在哪里设置呢? (2022-04-29 11:15) 

l刘典武大佬的武林秘籍里面有说

QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
签名就是这么浪
离线lwei24

只看该作者 6楼 发表于: 2022-05-05
回 spygg 的帖子
spygg:l刘典武大佬的武林秘籍里面有说
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
....... (2022-05-02 17:18) 

谢谢,刘大神的秘籍讲太多,有些没有看过,我试试看。
离线lwei24

只看该作者 7楼 发表于: 2022-05-05
回 spygg 的帖子
spygg:l刘典武大佬的武林秘籍里面有说
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
....... (2022-05-02 17:18) 

试了几次,点击按钮后,然后鼠标还是会先旋转等待,接着QFileDialog文件对话框才显示,偶尔有一两次很快就出现。不过会报错:Unsupported flags (9) used in QCollator。
快速回复
限100 字节
 
上一个 下一个