非常抱歉,我之前给出的代码确实在工作线程中使用了对话框,这是错误的做法。Qt要求UI操作必须在GUI线程中执行。
以下是一个修正后的示例代码,在主线程中弹出对话框并获取用户选择的地址和名称:
#include <QApplication>
#include <QFileDialog>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 在主线程中执行文件保存对话框
QString destinationFilePath = QFileDialog::getSaveFileName(nullptr, "Save ZIP File", "", "ZIP Files (*.zip)");
if (destinationFilePath.isEmpty()) {
qDebug() << "User canceled the file selection.";
return 0;
}
// 添加默认的ZIP文件扩展名
if (!destinationFilePath.endsWith(".zip", Qt::CaseInsensitive)) {
destinationFilePath += ".zip";
}
qDebug() << "Selected file path:" << destinationFilePath;
// 这里可以进行后续的操作,如将路径传递给其他函数进行文件保存等操作。
return app.exec();
}
现在,整个应用程序都在主线程中执行,包括弹出对话框和获取用户选择的地址和名称。这样可以避免”widgets must be created in the GUI thread”错误。
再次对之前的错误回答表示抱歉,并希望这个修正后的示例能够解决问题。如果还有任何疑问,请随时提问!
内容由零声教学AI助手提供,问题来源于学员提问