查看完整版本: [-- Qt QFileDialog::getSaveFileName响应慢 --]

QTCN开发网 -> Qt基础编程 -> Qt QFileDialog::getSaveFileName响应慢 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lwei24 2022-04-28 16:23

Qt QFileDialog::getSaveFileName响应慢


如题,在一个QPushButton点击事件的槽函数里添加一个如下的接口:
  1. void CustomDialog::onClickedBtnExportXls()
    {
        QString fileName = QFileDialog::getSaveFileName(this, QString("另存为"), "", tr("All Files (*.csv)"));
        qWarning()<<"fileName="<<fileName;
        if (!fileName.isNull())
        {
            QFile file;
            file.setFileName(fileName);
            if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
            {
                qWarning()<<"open failed!";
                return;
            }

            QTextStream out(&file);
            out<<QString("ID")<<",";
            out<<QString("姓名")<<",";
            out<<QString("性别")<<",";
            out<<QString("年龄")<<",";
            out<<QString("年纪")<<",";
            out<<QString("成绩")<<",";
            out<<QString("住址")<<",";
            out<<"\n";

            for(int i=0; i < m_StudentInfoList.count(); ++i)
            {
                STudentInfo info = m_StudentInfoList.at(i);
                out<<info.strIdx<<",";            
                out<<info.strName<<",";
                out<<info.strSex<<",";
                out<<info.strAge<<",";
                out<<info.strNum<<",";
                out<<info.strScore<<",";
                out<<info.strAddress<<",";
                out<<"\n";

            }
           file.close();
           return;
        }
    }


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



spygg 2022-04-28 21:35
因为选择文件的时候会尝试兼容网络文件上的文件,传参时候加上Qt::AA_DontUseNativeDialogs 好像就行了

lwei24 2022-04-29 11:15
spygg:因为选择文件的时候会尝试兼容网络文件上的文件,传参时候加上Qt::AA_DontUseNativeDialogs 好像就行了 (2022-04-28 21:35) 

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

meteorliu 2022-04-29 11:42
可以试下行不,或者是不是电脑太老了
QString fileName = QFileDialog::getSaveFileName(this, QString("另存为"), "", tr("All Files (*.csv)"), Q_NULLPTR, QFileDialog::ShowDirsOnly);

lwei24 2022-04-29 14:24
meteorliu:可以试下行不,或者是不是电脑太老了
QString fileName = QFileDialog::getSaveFileName(this, QString("另存为"), "", tr("All Files (*.csv)"), Q_NULLPTR, QFileDialog::ShowDirsOnly); (2022-04-29 11:42) 

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

spygg 2022-05-02 17:18
lwei24:请问你说的这个参数Qt::AA_DontUseNativeDialogs 是要在哪里设置呢? (2022-04-29 11:15) 

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

QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);

lwei24 2022-05-05 08:23
spygg:l刘典武大佬的武林秘籍里面有说
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
....... (2022-05-02 17:18) 

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

lwei24 2022-05-05 09:08
spygg:l刘典武大佬的武林秘籍里面有说
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
....... (2022-05-02 17:18) 

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


查看完整版本: [-- Qt QFileDialog::getSaveFileName响应慢 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled