Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Paramon от Декабрь 22, 2014, 17:29



Название: Стандартный диалог выбора папки
Отправлено: Paramon от Декабрь 22, 2014, 17:29
Qt 4.8.6

Вопрос тривиальный - как отобразить окно выбора папки такое же, как через винапишную функцию SHBrowseForFolder? Может флаги какие? Или это в принципе невозможно, кроме как использовать тот же SHBrowseForFolder?

Хочу вот такой диалог  ???

(http://savepic.org/6657646.png)


Название: Re: Стандартный диалог выбора папки
Отправлено: __Heaven__ от Декабрь 22, 2014, 18:04
Можно немного другой диалог вызвать:
QFileDialog::​getExistingDirectory


Название: Re: Стандартный диалог выбора папки
Отправлено: Paramon от Декабрь 23, 2014, 10:40
Так в том то и дело, что "немного" другой. А я бы хотел как на скрине. Привязываться к функциям WinAPI не хотелось бы.
Если средствами Qt это сделать невозможно - я отстану. Но надежда есть.  :(


Название: Re: Стандартный диалог выбора папки
Отправлено: Пантер от Декабрь 23, 2014, 10:42
На сколько я помню, именно такой диалог из Кьюта не вызвать. Могу и ошибаться. Но никто тебе не мешает сделать сою реализацию на винапи конкретно для винды.


Название: Re: Стандартный диалог выбора папки
Отправлено: __Heaven__ от Декабрь 23, 2014, 10:44
Я в папке qt src выполнил поиск на предмет содержания SHBrowseForFolder в файле.
В qtbase\src\plugins\platforms\windows нашёлся qwindowsdialoghelpers.cpp
Правда, я так и не разобрался, как сделать так, чтобы вызывался SHBrowseForFolder


Название: Re: Стандартный диалог выбора папки
Отправлено: Пантер от Декабрь 23, 2014, 10:46
Попробуй глянуть
void QFileDialog::​setOption(Option option, bool on = true) опцию QFileDialog::DontUseNativeDialog


Название: Re: Стандартный диалог выбора папки
Отправлено: __Heaven__ от Декабрь 23, 2014, 11:03
Ды не, там тогда строится какой-то преднастроенный диалог, не нативный.


Название: Re: Стандартный диалог выбора папки
Отправлено: Paramon от Декабрь 24, 2014, 11:34
Что интересно - на WindowsXP диалог такой как у меня на скрине. А вот уже на семёрке не то.


Название: Re: Стандартный диалог выбора папки
Отправлено: __Heaven__ от Декабрь 24, 2014, 11:43
Да, если покапаться в классах - там явно видно, что такой существует только в XP


Название: Re: Стандартный диалог выбора папки
Отправлено: Пантер от Декабрь 24, 2014, 11:44
В самой семерке же видоизменили диалоги.


Название: Re: Стандартный диалог выбора папки
Отправлено: Paramon от Декабрь 24, 2014, 11:48
В самой семерке же видоизменили диалоги.
Ну как это видоизменили, если даже системные утилиты на семёрке отображают диалог как на скрине.
Я так понимаю - иного выхода, как ковыряться в классах Qt и собирать его из сорцов, нет?


Название: Re: Стандартный диалог выбора папки
Отправлено: Пантер от Декабрь 24, 2014, 11:58
У меня такое предположение, что в 7 появился новый диалог выбора каталога и Кьют юзает его. Соответственно, под этот диалог появилась новая винапишная функция. Но старая осталась и стрые проги юзают ее. Могу ошибаться. Зачем копаться в Кьюте, если можно у себя сделать обертку, которая будет вызывать диалог через винапишную функцию? Там, думаю, реализация будет тривиальной.


Название: Re: Стандартный диалог выбора папки
Отправлено: Paramon от Декабрь 24, 2014, 12:03
Зачем копаться в Кьюте, если можно у себя сделать обертку, которая будет вызывать диалог через винапишную функцию? Там, думаю, реализация будет тривиальной.
Что-то типа если компилим под винду - вызываем винапишную функцию, иначе стандартную.
Последний вопрос - как понять, под что мы собираем?


Название: Re: Стандартный диалог выбора папки
Отправлено: Пантер от Декабрь 24, 2014, 12:06
http://bit.ly/1x3jHbE


Название: Re: Стандартный диалог выбора папки
Отправлено: __Heaven__ от Декабрь 24, 2014, 12:42
Или есть вариант свой такой же нарисовать  :)


Название: Re: Стандартный диалог выбора папки
Отправлено: Igors от Декабрь 24, 2014, 13:06
...если можно у себя сделать обертку, которая будет вызывать диалог через винапишную функцию? Там, думаю, реализация будет тривиальной.
Если конкретно SHBrowseForFolder - то видимо да. Но для "новых" диалогов (Win7) таких удобных ф-ций API нет, надо юзать какой-то SDK, иметь какие-то доп хедеры (уж и забыл как называются). В общем, приключений хватает

Или есть вариант свой такой же нарисовать  :)
Подобные бодрые предложения основываются на том что диалог - всего лишь "панельки/кнопочки" которые легко нахрюкать в любой приличной либе. В действительности это даже не 10% работы. Как-то в 90-х думали также, и связались на свою голову - НИКОГДА больше!!


Название: Re: Стандартный диалог выбора папки
Отправлено: Пантер от Декабрь 24, 2014, 13:12
...если можно у себя сделать обертку, которая будет вызывать диалог через винапишную функцию? Там, думаю, реализация будет тривиальной.
Если конкретно SHBrowseForFolder - то видимо да. Но для "новых" диалогов (Win7) таких удобных ф-ций API нет, надо юзать какой-то SDK, иметь какие-то доп хедеры (уж и забыл как называются). В общем, приключений хватает
Так нужен как раз старый диалог. Так что, работы тут на 10 минут.


Название: Re: Стандартный диалог выбора папки
Отправлено: Alex Custov от Декабрь 24, 2014, 14:02
У меня такое предположение, что в 7 появился новый диалог выбора каталога и Кьют юзает его.

Насколько я помню - IFileDialog со всеми прелестями COM.