Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alexu007 от Июнь 22, 2014, 16:18



Название: Диалог выбора файла [решено]
Отправлено: Alexu007 от Июнь 22, 2014, 16:18
    
Код
C++ (Qt)
full_fname = QFileDialog::getOpenFileName(this, tr("Open File"), "" , tr("*"));

Всегда сперва открывает папку, в которой находится ехе-шник. Неудобно - мягко сказано. Как сделать, чтобы после выхода из программы запоминал последнюю открытую папку, и в следующий раз начинал с неё?


Название: Re: Диалог выбора файла
Отправлено: Old от Июнь 22, 2014, 16:27
Брать путь возвращаемого файла, сохранять, при следующем запуске указывать его в параметре dir этой функции.

QString QFileInfo::absoluteFilePath() const

QString QFileDialog::getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0) [static]


Название: Re: Диалог выбора файла
Отправлено: Alexu007 от Июнь 22, 2014, 18:43
В билдере вроде само сохранялось...


Название: Re: Диалог выбора файла
Отправлено: Igors от Июнь 22, 2014, 19:08
В билдере вроде само сохранялось...
Вряд ли. Диалог показывает текущую для ОС, Qt ее устанавливает, а былдер нет. Впрочем нсли былдер лучше - так назад к нему  :)


Название: Re: Диалог выбора файла
Отправлено: Alexu007 от Июнь 23, 2014, 12:55
Впрочем нсли былдер лучше - так назад к нему  :)
Не, ну так вопрос не стоит... Сохранить предыдущий адрес конечно можно в файле, но добавлять в проект лишний файл как-то неохота. Некоторые программы (необязательно билдер, может с билдером я и ошибся) запоминают предыдущий адрес посещения. Может он в винде где-то хранится?


Название: Re: Диалог выбора файла
Отправлено: Old от Июнь 23, 2014, 12:56
Не, ну так вопрос не стоит... Сохранить предыдущий адрес конечно можно в файле, но добавлять в проект лишний файл как-то неохота. Некоторые программы (необязательно билдер, может с билдером я и ошибся) запоминают предыдущий адрес посещения. Может он в винде где-то хранится?
Если речь про венду, то и храните его не в файла, а в реестре. См. QSettings.


Название: Re: Диалог выбора файла
Отправлено: Bepec от Июнь 23, 2014, 12:58
Мб я и совру, но на серверных системах я пару раз замечал, что он ставит последнюю папку автоматически. Хотя не уверен.


Название: Re: Диалог выбора файла
Отправлено: _OLEGator_ от Июнь 23, 2014, 14:21
Если вызвать диалог так:
Код
C++ (Qt)
full_fname = QFileDialog::getOpenFileName(this, tr("Open File"), "." , tr("*"));

У меня сохраняется последний открытый путь. Не факт, что он устанавливается для конкретного приложения.


Название: Re: Диалог выбора файла
Отправлено: Bepec от Июнь 23, 2014, 14:22
Кстати да, именно такие параметры и я передаю обычно.


Название: Re: Диалог выбора файла
Отправлено: Old от Июнь 23, 2014, 14:28
У меня сохраняется последний открытый путь. Не факт, что он устанавливается для конкретного приложения.
Даже если закрыть программу и открыть вновь? :)
А ТС хочет именно этого.


Название: Re: Диалог выбора файла
Отправлено: _OLEGator_ от Июнь 23, 2014, 14:41
Даже если закрыть программу и открыть вновь? :)
А ТС хочет именно этого.

Именно, после закрытия путь сохраняется, но не факт, что если из другого приложения открыть диалог - путь не изменится.


Название: Re: Диалог выбора файла
Отправлено: Alexu007 от Июнь 23, 2014, 17:11
Не, эта точка в кавычках "." чуда не совершила. Каждый раз при вызове "открыть файл" открывается папка с ехешником, даже если и не выходить из программы. Вызов производится при нажатии кнопки:

Код
C++ (Qt)
// нажтие кнопки Open File
// ********************************************************************
// ********************************************************************
void Widget::MyEventButton_1()
{
   full_fname = "";
 
   // диалог выбора файла
   full_fname = QFileDialog::getOpenFileName(this, tr("Open File"), "." , tr("*"));
                                                          //"C:/Users/Alexu/Desktop/", tr("*"));
 
   ui->label_1->setText("Fname:  " + full_fname);
 
   return;
}


Название: Re: Диалог выбора файла
Отправлено: kambala от Июнь 23, 2014, 17:14
full_fname = "", return — зачем?..


Название: Re: Диалог выбора файла
Отправлено: Igors от Июнь 23, 2014, 17:21
Не, эта точка в кавычках "." чуда не совершила. Каждый раз при вызове "открыть файл" открывается папка с ехешником, даже если и не выходить из программы. Вызов производится при нажатии кнопки:
Такое у меня было - правда на совсем др платформе и версии Qt. Решил давая несуществующий путь напр "path does not exist". Но это помогает только если не выходить.


Название: Re: Диалог выбора файла
Отправлено: Alexu007 от Июнь 23, 2014, 17:48
full_fname = "", return — зачем?..
full_fname = "" - согласен, лишняя. С return, точнее с его отсутствием, у меня как-то были заморочки, правда в билдере. Я с тех пор везде его ставлю - он же не мешает?


Название: Re: Диалог выбора файла
Отправлено: Vamireh от Июнь 23, 2014, 17:51
Не проще через QSettings сохранять lastPath? Я так всегда делаю.


Название: Re: Диалог выбора файла
Отправлено: Alexu007 от Июнь 23, 2014, 18:15
Блин, дело не в этом оказалось! Я на компе работаю пользователем, а администратор у меня под паролем. Папка с библиотеками и эксешником была на рабочем столе - не запоминает. А перенёс папку на диск С - оттуда всё запоминает. Не только выход из программы, но и перезагрузку компа переживает.

Что-то с правами доступа, наверное...



Название: Re: Диалог выбора файла
Отправлено: kambala от Июнь 23, 2014, 19:17
full_fname = "", return — зачем?..
full_fname = "" - согласен, лишняя. С return, точнее с его отсутствием, у меня как-то были заморочки, правда в билдере. Я с тех пор везде его ставлю - он же не мешает?
в функции, возвращающей void, return нужен только для принудительного выхода из нее. просто так его ставить смысла нету.


Название: Re: Диалог выбора файла
Отправлено: Alexu007 от Июнь 23, 2014, 19:52
в функции, возвращающей void, return нужен только для принудительного выхода из нее. просто так его ставить смысла нету.
Да знаю я это, но ведь и не мешает же? Компилятору скорее всего что фигурная скобка, что return - безразлично. По мне - так конец функции лучше видно в тексте программы: return и фигурная скобка.