【发布时间】:2016-05-30 15:37:20
【问题描述】:
我在 Qt 中有一个用于保存文件的 QFileDialog。
它不是发送信号。我通过它连接它 QFileDialog 诊断(此); ...
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(如 cmets 中所建议的那样):
connect(
dialog, &QFileDialog::filterSelected,
this, &MainWindow::saveAsDiagFilterSelected);
但仍然没有结果。
更新
发现使用操作系统本机对话框(我在 Linux 下,不知道这是否发生在其他 SO 中),正在产生问题。如果我这样做了
dialog->setOption(QFileDialog::DontUseNativeDialog, true);
发出信号。我该如何解决这个问题?
【问题讨论】:
-
从您的信号/插槽签名中删除
const和引用。 -
为我工作。您在标准错误中看到“没有这样的插槽......”吗?顺便说一句:如果你使用
QFileDialog diag(this),那么你的连接应该以connect(&diag, ...开始 -
考虑使用new signal slot syntax。这会产生编译时错误,而不是旧语法(使用
SIGNAL和SLOT宏)产生的运行时错误。 -
@KarstenKoop 我没有运行时错误
-
@IInspectable 我没有收到运行时错误!更改为新的信号 API 并没有解决问题:(