QT--QFileDialog窗口在主窗口关闭之后窗口未关闭

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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值