Изменение QFileDialog :: getOpenFileName для дополнительного раскрывающегося списка - PullRequest
6 голосов
/ 14 марта 2012

Я студент-программист, использующий Qt для создания таблицы читателей для моей компании.Этот читатель является и редактором, и конвертером.Он читает в файле .i позволяет редактировать таблицы текстового документа, а затем выдает файл .scf, который по сути представляет собой отдельный файл значений, сложенный под легендой, созданной с заголовками.Я отступаю ... В основном, импортируемый формат файла действительно трудно сканировать и считывать (в основном невозможно), поэтому мне хотелось бы изменить открытый файл preBuilt QFileDialog, чтобы включить дополнительный раскрывающийся список, когда для декларации выбираются более старые типы файловзаголовки их шаблонов.

Когда пользователь выбирает файлы расширения .i (тип файла опции 2), я хотел бы включить дополнительное раскрывающееся меню, чтобы позволить пользователю выбрать тип файла .i (шаблон)выбран).Таким образом, мне не нужно иметь дело с богом знает, сколько часов я пытаюсь найти способ индексировать все заголовки в таблице для каждого отдельного типа.В настоящее время моя функция importFile вызывает диалог, используя это:

QString fileLocation = QFileDialog::getOpenFileName(this,("Open File"), "", ("Simulation Configuration File(*.scf);;Input Files(*.prp *.sze *.i *.I *.tab *.inp *.tbl)")); //launches File Selector

Я ссылаюсь на Документация QFileDialog , чтобы попытаться найти решение, которое мне нужно, но безрезультатно.Спасибо за чтение моего поста и заранее спасибо за любое направление, которое вы можете дать по этому вопросу.

ОБНОВЛЕНИЕ 16 марта 2012 г .;Сначала я хотел бы поблагодарить Masci за его начальную поддержку в этом вопросе.Ниже приведено заявление о соединении, которое я получаю вместе с полученной ошибкой.

//Declared data type
    QFileDialog openFile;
    QComboBox comboBoxTemplateSelector;
    connect(openFile, SIGNAL(currentChanged(const &QString)), this, SLOT(checkTemplateSelected()));
    openFile.layout()->addWidget(comboBoxTemplateSelector);

compile errors

Я также заметил, что мне не понравилось, как я добавил QComboBox в измененный макет диалога (что является второй ошибкой).Я действительно надеюсь, что я просто делаю что-то глупое, и это легко решить.

В ответ на комментарий tmpearce вот мой код заголовка;

#include <QWidget>
namespace Ui {
class ReaderTable;
}
class ReaderTable : public QWidget
{
    Q_OBJECT
public:
    explicit ReaderTable(QWidget *parent = 0);
    ~ReaderTable();
public slots:
    void checkTemplateSelected();
    void importFile();
    void saveFile();
private:
    Ui::ReaderTable *ui;
};

Спасибо за чтение и спасибозаранее за любой вклад в этот вызов!

Ответы [ 2 ]

6 голосов
/ 14 марта 2012

Экземпляр QFileDialog (не вызывайте статический метод getOpenFileName), доступ к его макету и добавление к нему отключенного QComboBox.

// mydialog_ and cb_ could be private fields inside MyClass
mydialog_ = new QFileDialog;
cb_ = new QComboBox;
cb_->setEnabled(false);
connect(mydialog, SIGNAL(currentChanged(const QString&)), this, SLOT(checkFilter(const QString&)));
mydialog_->layout()->addWidget(cb_);

if (mydialog_->exec() == QDialog::Accepted) {
    QString selectedFile = mydialog_->selectedFiles()[0];
    QString cbSelection = cb_->currentText();
}

слот будет выглядеть примерно так:

void MyClass::checkFilter(const QString& filter) 
{
  cb_->setEnabled(filter == "what_you_want");
}

вернувшись из диалога exec (), вы можете получить выбранный файл и cb_ текущий выбор.Обратите внимание, что вы можете добавить что-то более сложное, чем простой QComboBox, внизу диалогового окна, заботясь о косметике графического интерфейса.

На самом деле мне не очень нравится этот подход (но это было то, что вы просили: -).Я бы сделал простой диалог вроде этого:

enter image description here

и включил бы комбо, только если выбранный файл соответствует вашим критериям.Кнопка «Обзор» может вызывать статический метод getOpenFileMethod в QFileDialog.

0 голосов
/ 14 марта 2012

Вы можете обрабатывать выбор товара по этому сигналу:
void QFileDialog::fileSelected ( const QString & file )
Затем происходит вызов setFilter с нужным вам типом.
Извините, если я не понимаю вашу задачу.

...