Всякий раз, когда я выбираю файл в моем QFileDialog принятый сигнал запускаемое и окно закрывается. Я хочу, чтобы держать окно открытым, чтобы я мог выбрать несколько файлов
Все остальные ответы просто решение для выбора многих файлов одновременно и CLOSE
окно после нажатия кнопки Open
. Получите мое решение, это не очень просто, потому что он требует много работы:
я использовал LAMDA выражение и новые сигналы и синтаксис слотов в моем ответе, но вы можете использовать старый синтаксис или добавить
CONFIG += c++11
в файл .pro и использовать lambdas.
Подкласс QFileDialog:
Заголовок:
#ifndef CUSTOMFILEDIALOG_H
#define CUSTOMFILEDIALOG_H
#include <QFileDialog>
#include <QDebug>
class CustomFileDialog : public QFileDialog
{
Q_OBJECT
public:
explicit CustomFileDialog(QWidget *parent = 0);
void setDefaultGeo(QRect);
signals:
void newPathAvailable(QStringList list);
public slots:
private:
bool openClicked;
QRect geo;
};
#endif // CUSTOMFILEDIALOG_H
При нажатии кнопки открыты, вы скрыть ваш диалог, а не закрывать!Cpp:
#include "customfiledialog.h"
CustomFileDialog::CustomFileDialog(QWidget *parent) :
QFileDialog(parent)
{
openClicked = false;
connect(this,&QFileDialog::accepted,[=]() {
openClicked = true;
qDebug() << openClicked;
this->setGeometry(geo);
this->show();
emit newPathAvailable(this->selectedFiles());
});
}
void CustomFileDialog::setDefaultGeo(QRect rect)
{
geo = rect;
}
Использование:
CustomFileDialog *dialog = new CustomFileDialog;
QStringList fileNames;
dialog->setFileMode(QFileDialog::ExistingFiles);
dialog->show();
dialog->setDefaultGeo(dialog->geometry());
connect(dialog,&CustomFileDialog::newPathAvailable,[=](QStringList path) {
qDebug() << path;
});
Зачем вам нужен setDefaultGeo
? Без этого метода ваше окно будет перемещаться после нажатия Open
.
Что мы получаем?
открыть FileDialog и выбрать два файла:
Я щелкнул, но окно не закрывается! Вы можете выбирать новые файлы снова и снова!
еще один файл и так далее:
Окно будет закрыто только тогда, когда пользователь нажимает кнопку Закрыть, но вы будете иметь все пути, которые выбирают пользователь.
Как вы сказали:
Я хочу, чтобы держать окно открытым, чтобы я мог выбрать несколько файлов
Вы получаете это.
Обратите внимание, что меня не волнует сигнал, который срабатывает, как только изменяется выбор. Меня беспокоит только то, что происходит при явном нажатии 'open'. – Kvass
Вы можете использовать QStringList filenames = QFileDialog :: getOpenFileNames (это, «Открыть файл»); чтобы получить список со всеми выбранными файлами, но он не отвечает на ваш вопрос. –
Вы хотите, чтобы этот пользователь мог выбрать один файл, открыть его, добавить этот файл, Окно по-прежнему открыто, а пользователь выбрать следующий файл, щелкнуть по кнопке «Открыть» и т. Д., И, наконец, когда пользователь нажимает кнопку «Закрыть», окно закрывается? – Chernobyl