首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFileDialog不发出信号

QFileDialog不发出信号
EN

Stack Overflow用户
提问于 2016-05-30 15:37:20
回答 2查看 580关注 0票数 1

我在Qt中有一个保存文件的QFileDialog。

这不是在破坏信号。我通过QFileDialog diag(这个)连接;.

代码语言:javascript
复制
connect(
        dialog, SIGNAL(filterSelected(const QString&)),
        this,                 SLOT(saveAsDiagFilterSelected(const QString&)),
        Qt::QueuedConnection);

然后用exec()调用它。saveAsDiagFilterSelected从未被调用过。

可能出什么事了?

我就是这样创建对话框的:

代码语言:javascript
复制
dialog = new QFileDialog(this);
dialog->setFileMode(QFileDialog::AnyFile);
dialog->setNameFilters(filterList);
dialog->setAcceptMode(QFileDialog::AcceptSave);
dialog->setWindowTitle(windowTitle);

我尝试实现新的信号API (如注释中所建议的):

代码语言:javascript
复制
connect(
        dialog, &QFileDialog::filterSelected,
        this,   &MainWindow::saveAsDiagFilterSelected);

但还是没有结果。

更新

发现使用操作系统本机对话框(我在Linux下,不知道在其他操作系统中是否会发生这种情况)会造成问题。如果我做了

代码语言:javascript
复制
dialog->setOption(QFileDialog::DontUseNativeDialog, true);

信号发射了。我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-30 18:54:57

您的平台上的本机对话框不会通知用户过滤器的更改,所以Qt没有什么可以发出信号的--使用这个特定的本机对话框是不可能的。或者,所需的功能没有在Qt中实现。此行为是特定于平台的。它至少能在Windows上工作。

票数 2
EN

Stack Overflow用户

发布于 2016-05-30 15:57:10

尝试设置这样的插槽/信号:

代码语言:javascript
复制
connect(
        dialog, SIGNAL(filterSelected(QString)),
        this, SLOT(saveAsDiagFilterSelected(QString)),
        Qt::QueuedConnection);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37529397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档