Russian Qt Forum
Сентябрь 30, 2024, 16:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена  (Прочитано 8045 раз)
CroCIV
Гость
« : Ноябрь 26, 2009, 12:02 »

Как это делается  Непонимающий Хотелось бы скрыть конпку отмены в экземпляре класса QFileDialog, наследнике класса QDialog... не хочу свой сохранятор файлов писать из-за такого пустяка  Строит глазки
Записан
spectre71
Гость
« Ответ #1 : Ноябрь 26, 2009, 12:07 »

Как это делается  Непонимающий Хотелось бы скрыть конпку отмены в экземпляре класса QFileDialog, наследнике класса QDialog... не хочу свой сохранятор файлов писать из-за такого пустяка  Строит глазки

Не могу себе представить задачу в которой это может требоваться.
Записан
CroCIV
Гость
« Ответ #2 : Ноябрь 26, 2009, 13:15 »

сделал визард, последняя страница которого посвящена теме сохранения сделанных манипуляций
Записан
spectre71
Гость
« Ответ #3 : Ноябрь 26, 2009, 13:37 »

Ну и не надо тебе убирать кнопку отмена.
У тебя ведь в визарде есть "Cancel" !
1) Если у тебя выбор файла прямо в визарде, то "Cancel" работает как обычно - выходим из визарда с отменой всего.
2) Если у тебя диалог выбора файла повешен на "Finish" визарда, то "Cancel" просто закрывает диалог и пользователь снова может манипулировать с шагами визарда, в том числе и нажать "Finish" или  "Cancel",  "Back",... И это правильно!
Записан
spectre71
Гость
« Ответ #4 : Ноябрь 26, 2009, 13:41 »

А понял, ты воткнул диалог прямо в визард. А может не стоит этого делать? А повесить открытие диалога на "Finish" или "Next"?
Записан
spectre71
Гость
« Ответ #5 : Ноябрь 26, 2009, 13:56 »

Вот тебе пример как можно сделать.
Считай что "Work Path" - выбор файла
Записан
CroCIV
Гость
« Ответ #6 : Ноябрь 26, 2009, 13:58 »

ну... можно и на финиш повесить не вопрос, но мне не нравится факт мерцания окошек... одно уничтожается, второе тут же рисуется, чтоб через пару секунд тоже быть закрытым... как-то это.. костылеподобно как-то Улыбающийся

А тут по идее казалось бы, убираем лишнюю кансел, и получается у нас гармония: кнопка финиш будет доступна тогда и только тогда, когда пользователь нажмет буттон "сохранить", и в то же время дополнительное удобство пользователю, вот он нажал сохранить и придумал вернуться на пару шагов назад что-то там подправить, такое у пользователей бывает часто ))
Вот и вся задача тут сводится к получению двух каких-то там указателей на две кнопки, что может быть проще ... казалось бы  Смеющийся
Записан
BRE
Гость
« Ответ #7 : Ноябрь 26, 2009, 13:58 »

Можно попробовать найти эту кнопку по имени (если это имя указано).
Метод:
QList<T> QObject::findChildren ( const QString & name = QString() ) const

Код:
// Вернет список кнопок на dlg с именем cancel
QList<QPushButton *> widgets = dlg.findChildren<QPushButton *>( "cancel" );

// Вернет список всех QPushButton на dlg
QList<QPushButton *> allPButtons = dlg.findChildren<QPushButton *>();


Точнее найти сначала QButtonBox (его имя на диалоге "buttonBox" ), а в нем уже отключить кнопку Cancel.
« Последнее редактирование: Ноябрь 26, 2009, 14:01 от BRE » Записан
spectre71
Гость
« Ответ #8 : Ноябрь 26, 2009, 13:59 »

Можно попробовать найти эту кнопку по имени (если это имя указано).
Метод:
QList<T> QObject::findChildren ( const QString & name = QString() ) const

Код:
// Вернет список кнопок на dlg с именем cancel
QList<QPushButton *> widgets = dlg.findChildren<QPushButton *>( "cancel" );

// Вернет список всех QPushButton на dlg
QList<QPushButton *> allPButtons = dlg.findChildren<QPushButton *>();


А как быть с нативными диалогами? Улыбающийся
Записан
CroCIV
Гость
« Ответ #9 : Ноябрь 26, 2009, 14:00 »

Вот тебе пример как можно сделать.
Считай что "Work Path" - выбор файла

Я не знаю чем заполнить оставшееся пространство формы ))) я об этом думал у меня в других модулях программы так и реализовано... а тут вот хз чо вставить, мб какуюнить анимированную заставку чтоле ))))))
Записан
BRE
Гость
« Ответ #10 : Ноябрь 26, 2009, 14:02 »

А как быть с нативными диалогами? Улыбающийся
А нативный можно встроить?
Если Да, то никак.  Улыбающийся
Записан
spectre71
Гость
« Ответ #11 : Ноябрь 26, 2009, 14:03 »

ну... можно и на финиш повесить не вопрос, но мне не нравится факт мерцания окошек... одно уничтожается, второе тут же рисуется, чтоб через пару секунд тоже быть закрытым... как-то это.. костылеподобно как-то Улыбающийся

Нет, вызов именно диалога для выбора файла - это как раз стандартно! И это всем будет понятно.
А вот встраивание дилога выбора файла прямо в страницу визарда приводит в замешательство.
Записан
CroCIV
Гость
« Ответ #12 : Ноябрь 26, 2009, 14:05 »

Можно попробовать найти эту кнопку по имени (если это имя указано).
Метод:
QList<T> QObject::findChildren ( const QString & name = QString() ) const

Код:
// Вернет список кнопок на dlg с именем cancel
QList<QPushButton *> widgets = dlg.findChildren<QPushButton *>( "cancel" );

// Вернет список всех QPushButton на dlg
QList<QPushButton *> allPButtons = dlg.findChildren<QPushButton *>();


Точнее найти сначала QButtonBox (его имя на диалоге "buttonBox" ), а в нем уже отключить кнопку Cancel.

кстати не пробовал, забыл совсем что у QObject есть такая фича  Строит глазки  щас попробую поискать, спс
Записан
spectre71
Гость
« Ответ #13 : Ноябрь 26, 2009, 14:11 »

Кстати, если сохранение - последний шаг, то лучше будет повесить вызов диалога на "Finish" у визарда, но обозвать кнопку как "Save". А на этой последней странице отобразить некоторый "Info/Log" того что сохраняется.
« Последнее редактирование: Ноябрь 26, 2009, 14:14 от Spectre » Записан
BRE
Гость
« Ответ #14 : Ноябрь 26, 2009, 14:18 »

Я делаю как предложил Spectre c диалогом Work Path. И ничего, если страница будет не сильно заполнена. Всегда можно добавить какую-то информацию для юзера, режимы сохранения и т.д.

В твоем случае, даже если отключить Cancel, пользователю нужно догадаться нажимать Ok на диалоге, и только после этого будет включиться кнопка Finish. Не очень удобно.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 21.