2011-01-24 4 views
0

фрагмент того, что я использую выглядит следующим образомQFileDialog возвращает неправильный Адресной книги

QDir lastDir; 
QFileDialog dial(this); 

dial.getOpenFileName(this, 
        tr("Open File"), 
        QString("/home"), 
        tr("Raw Images (*.nef *.NEF *.dng *.DNG)")); 

lastDir = dial.directory(); 
qDebug() << lastDir; 

Выход, не совсем так, независимо от того, в каком каталоге я в конечном итоге. Тем не менее, неправильный каталог всегда одна и та же.

AFAICT Я здесь ничего плохого не делаю. Что здесь происходит? Cheers

+0

Хм, следовало бы ознакомиться с документами ближе. «Возвращает каталог, отображаемый в данный момент в диалоговом окне». Странно, что он возвращает каталог, на который я никогда не смотрел. – regomodo

ответ

3

getOpenFileName() - статическая функция, которая сразу же открывает диалоговое окно «выборщик файлов» и возвращает после того, как пользователь завершит диалог, «существующий файл, выбранный пользователем». Вы можете использовать его, как это (обратите внимание на использование :: и имя класса QFileDialog вместо имени объекта):

QString fileName = QFileDialog::getOpenFileName(this, 
       tr("Open File"), 
       QString("/home"), 
       tr("Raw Images (*.nef *.NEF *.dng *.DNG)")); 

directory() не является статичным и возвращает «каталог в настоящее время отображается в диалоговом окне». Эта функция предназначена для вызова, пока диалог по-прежнему открыт, он предназначен для случаев использования, которые не покрываются статическими вызовами.


Что происходит здесь вы экземпляр объекта, называется статической функции на нем (что не влияет на его состояние), а затем называется directory(), который будет просто отражать исходное состояние объекта, который вероятно, является рабочим каталогом. Вместо этого вам нужно сохранить возвращаемое значение вызова getOpenFileName() в переменной, как показано выше.

Если вы хотите попросить пользователя просто выбрать каталог, вы можете вместо этого использовать getExistingDirectory(). Кроме того, если вы хотите извлечь каталог из имени файла, класс QDir имеет некоторые полезные для этого функции.

+0

Спасибо, прочитав документы немного больше, я понял свою ошибку. То, что я получил, было qdir/qstring из каталога, просматриваемого в диалоговом окне. В конце я просто использовал возвращаемый QString из _getOpenFileName_ и вырезал имя файла. Таким образом, в следующий раз, когда я открою filedialog, я вернусь в последнюю папку, которую я просмотрел. Было странно, что каталог из _directory_ был «/ media/data/Projects/python/Gereqi/icons», когда на самом деле мой рабочий каталог был «/ media/data/Projects/C++/rawviewer /». Weird. – regomodo

 Смежные вопросы

  • Нет связанных вопросов^_^