QFileDialog不发出信号

时间:2016-05-30 15:37:20

标签: c++ qt

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

这不是微弱的信号。我通过它连接     QFileDialog diag(this);     ...

connect(
        dialog, SIGNAL(filterSelected(const QString&)),
        this,                 SLOT(saveAsDiagFilterSelected(const QString&)),
        Qt::QueuedConnection);

然后使用exec()调用它。永远不会调用saveAsDiagFilterSelected

可能出现什么问题?

这是我创建对话框的方式:

dialog = new QFileDialog(this);
dialog->setFileMode(QFileDialog::AnyFile);
dialog->setNameFilters(filterList);
dialog->setAcceptMode(QFileDialog::AcceptSave);
dialog->setWindowTitle(windowTitle);

我尝试实施新的信号API(如评论中所示):

connect(
        dialog, &QFileDialog::filterSelected,
        this,   &MainWindow::saveAsDiagFilterSelected);

但仍然没有结果。

更新

发现使用操作系统本机对话框(我在Linux下,不知道这是否发生在其他SO中),正在产生问题。如果我做

dialog->setOption(QFileDialog::DontUseNativeDialog, true);

信号被发出。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

平台上的本机对话框不会告知用户有关过滤器更改的信息,因此Qt无法发出信号 - 这种特定的本机对话框无法实现。或者也许在Qt中没有实现必要的功能。此行为是特定于平台的。它至少适用于Windows。

答案 1 :(得分:1)

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

connect(
        dialog, SIGNAL(filterSelected(QString)),
        this, SLOT(saveAsDiagFilterSelected(QString)),
        Qt::QueuedConnection);