我在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);
信号被发出。我该如何解决这个问题?
答案 0 :(得分:2)
平台上的本机对话框不会告知用户有关过滤器更改的信息,因此Qt无法发出信号 - 这种特定的本机对话框无法实现。或者也许在Qt中没有实现必要的功能。此行为是特定于平台的。它至少适用于Windows。
答案 1 :(得分:1)
尝试设置这样的插槽/信号:
connect(
dialog, SIGNAL(filterSelected(QString)),
this, SLOT(saveAsDiagFilterSelected(QString)),
Qt::QueuedConnection);