qt在调出QFileDialog类的windows窗口上传文件时,普遍使用的是**getOpenFileName()**静态函数,不能定义各种细节。导致主窗口已经退出了,QFileDialog的窗口未退出。查看帮助文档可以看到
意思是:在对话框执行过程中不要删除父对话框。如果您希望这样做,您应该使用QFileDialog构造函数之一自己创建对话框。
构造函数法创建QFileDialog 对象:
QString absPath;
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setWindowTitle(tr("请选择文件"));
fileDialog->setDirectory(".");
fileDialog->setNameFilter(tr("配置文件(%1)").arg(fileInfo.fileName()));
connect(g_pMainWindow, SIGNAL(signal_mainWindowClosed()), fileDialog, SLOT(close()));
if(fileDialog->exec() == QDialog::Accepted)
absPath = fileDialog->selectedFiles()[0];
其中signal_mainWindowClosed为主窗口的关闭信号,setNameFilter可以对文件对话框进行筛选。这样便可实现主窗口关闭时,QFileDialog的窗口也能关闭。absPath 可以获取上传的文件的文件路径。
同理。保存文件到windows系统使用静态方法为getSaveFileName(),改为使用构造函数法:
QString localFilePath;
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setAcceptMode(QFileDialog::AcceptSave);
fileDialog->setWindowTitle(tr("文件另存为"));
fileDialog->setDirectory(".");
fileDialog->setNameFilter(tr("配置文件(*.%1)").arg(fileInfo.suffix()));
fileDialog->selectFile(fileInfo.fileName());
connect(g_pMainWindow, SIGNAL(signal_mainWindowClosed()), fileDialog, SLOT(close()));
if(fileDialog->exec() == QDialog::Accepted)
localFilePath = fileDialog->selectedFiles()[0];
其中signal_mainWindowClosed为主窗口的关闭信号,selectFile为需要保存的文件的路径。setAcceptMod定义对话框是用于打开还是保存文件。默认情况下,此属性设置为AcceptOpen。