【发布时间】:2021-10-15 03:13:46
【问题描述】:
我有一个带有“保存”按钮的自定义 QDialog,它应该使用 QFileDialog 提示用户并将 Table Widget 的内容保存到文件中,但保持对话框打开。
这是打开对话框并保存数据的函数:
bool ResultsDialog::saveData()
{
QString outfile = QFileDialog::getSaveFileName(this, tr("Save results"), tr(""), tr("CSV Files (*.csv)") );
if (outfile.isNull() || outfile.isEmpty() )
return false;
if (!CSVIO::write_to_csv(*ui->tableWidget, outfile) )
{
QMessageBox::critical(this, "Failed to save...", QString("Could not save file: %1").arg(outfile) );
return false;
}
return true;
}
这是保存按钮槽的代码:
void ResultsDialog::on_saveButton_clicked()
{
if (saveData() )
{
saved = true;
}
}
编辑:这是创建和打开 ResultsDialog 的代码:
void MainWindow::displayResults()
{
ResultsDialog *resultsDialog = new ResultsDialog(this);
resultsDialog->setWindowTitle(windowTitle() );
resultsDialog->setWindowIcon(windowIcon() );
connect(resultsDialog, &ResultsDialog::finished, this, &MainWindow::close);
resultsDialog->fill(playlistTable, notes);
resultsDialog->setModal(true);
resultsDialog->open();
this->hide();
}
问题是,QFileDialog一关闭,我的QDialog也随之关闭,控制台打印如下信息:
qt.qpa.xcb:QXcbConnection:XCB 错误:3(BadWindow),序列:13049, 资源 id:25205189,主要代码:40(TranslateCoords),次要代码:0
11:59:01:/home/user1/workspace/build-App-Desktop-Debug/App 退出 代码为 0
请注意,我的自定义对话框的父级 MainWindow 已隐藏。当它不被隐藏时,这个问题就会消失,但这不是一个选项,因为我希望 MainWindow 被隐藏。
我在 Debian Bullseye 上使用 Qt 5.15。
【问题讨论】:
-
只是检查我是否理解得很好:所以如果你的 MainWindow 没有隐藏,那么在 QFileDialog 关闭后你的 ResultsDialog 不会自动关闭?
-
没错。我正在添加打开 ResultsDialog 的代码。