У меня есть приложение Qt GUI, и у меня есть кнопка для поиска выходной папки. Но есть ошибка, которую я не могу понять. Когда вы запустите приложение и нажмите кнопку браузера, он отлично работает, и вы можете закрыть его и т. Д. Затем, если вы нажмете кнопку во второй раз, откроется окно браузера, и вы можете выбрать папку, но на этот раз, когда вы закроете он, окно сразу появляется снова во второй раз. И если вы повторите это, это заставит вас закрыть его 3 раза, 4 раза и т. Д.Открытие браузера папки Qt более одного раза
Я не мог понять, почему это происходит с кодом, который у меня есть на данный момент.
void Dialog::on_outputFolderBrowseBtn_pressed()
{
QObject::connect(ui->outputFolderBrowseBtn, SIGNAL(clicked()), this, SLOT(BrowseOutputFolder()));
}
void Dialog::BrowseOutputFolder()
{
QFileDialog dialog;
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly);
QString folderName = QFileDialog::getExistingDirectory(this, tr("Output folder"), "", QFileDialog::ShowDirsOnly);
if(folderName.size() != 0)
{
QDir folder(folderName);
if(!folder.exists())
{
SecureLogger::Instance()->LogError("Folder does not exist ", __FILE__, __LINE__);
}
ui->OutputFolderPath->setText(folderName);
}
}
Я побежал через отладчик и он продолжает прыгать обратно к этой линии:
QString folderName = QFileDialog::getExistingDirectory(this, tr("Output folder"), "", QFileDialog::ShowDirsOnly);
Может кто-нибудь понять, почему это происходит?
EDIT: Я исправил проблему, но не обязательно решил проблему. На данный момент я просто добавил флаг bool для нажатия кнопки. Таким образом, код теперь выглядит следующим образом:
void Dialog::on_outputFolderBrowseBtn_pressed()
{
m_clicked = true;
QObject::connect(ui->outputFolderBrowseBtn, SIGNAL(clicked()), this, SLOT(BrowseOutputFolder()));
}
void Dialog::BrowseOutputFolder()
{
QString folderName;
if (m_clicked)
{
folderName = QFileDialog::getExistingDirectory(this, tr("Select Folder"), "", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
m_clicked = false;
}
if(!folderName.isEmpty())
{
QDir folder(folderName);
if(!folder.exists())
{
SecureLogger::Instance()->LogError("Folder does not exist ", __FILE__, __LINE__);
}
ui->OutputFolderPath->setText(folderName);
}
}
Это просто халтура вокруг и оленьей кожи сказать мне, что случилось, в первую очередь, так что любое понимание о том, почему эта линия была вызывалась снова и было бы весьма признателен ,