Название: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: CroCIV от Ноября 26, 2009, 12:02 Как это делается ??? Хотелось бы скрыть конпку отмены в экземпляре класса QFileDialog, наследнике класса QDialog... не хочу свой сохранятор файлов писать из-за такого пустяка ::)
Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 12:07 Как это делается ??? Хотелось бы скрыть конпку отмены в экземпляре класса QFileDialog, наследнике класса QDialog... не хочу свой сохранятор файлов писать из-за такого пустяка ::) Не могу себе представить задачу в которой это может требоваться. Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: CroCIV от Ноября 26, 2009, 13:15 сделал визард, последняя страница которого посвящена теме сохранения сделанных манипуляций
Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 13:37 Ну и не надо тебе убирать кнопку отмена.
У тебя ведь в визарде есть "Cancel" ! 1) Если у тебя выбор файла прямо в визарде, то "Cancel" работает как обычно - выходим из визарда с отменой всего. 2) Если у тебя диалог выбора файла повешен на "Finish" визарда, то "Cancel" просто закрывает диалог и пользователь снова может манипулировать с шагами визарда, в том числе и нажать "Finish" или "Cancel", "Back",... И это правильно! Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 13:41 А понял, ты воткнул диалог прямо в визард. А может не стоит этого делать? А повесить открытие диалога на "Finish" или "Next"?
Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 13:56 Вот тебе пример как можно сделать.
Считай что "Work Path" - выбор файла Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: CroCIV от Ноября 26, 2009, 13:58 ну... можно и на финиш повесить не вопрос, но мне не нравится факт мерцания окошек... одно уничтожается, второе тут же рисуется, чтоб через пару секунд тоже быть закрытым... как-то это.. костылеподобно как-то :)
А тут по идее казалось бы, убираем лишнюю кансел, и получается у нас гармония: кнопка финиш будет доступна тогда и только тогда, когда пользователь нажмет буттон "сохранить", и в то же время дополнительное удобство пользователю, вот он нажал сохранить и придумал вернуться на пару шагов назад что-то там подправить, такое у пользователей бывает часто )) Вот и вся задача тут сводится к получению двух каких-то там указателей на две кнопки, что может быть проще ... казалось бы ;D Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: BRE от Ноября 26, 2009, 13:58 Можно попробовать найти эту кнопку по имени (если это имя указано).
Метод: QList<T> QObject::findChildren ( const QString & name = QString() ) const Код: // Вернет список кнопок на dlg с именем cancel Точнее найти сначала QButtonBox (его имя на диалоге "buttonBox" ), а в нем уже отключить кнопку Cancel. Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 13:59 Можно попробовать найти эту кнопку по имени (если это имя указано). Метод: QList<T> QObject::findChildren ( const QString & name = QString() ) const Код: // Вернет список кнопок на dlg с именем cancel А как быть с нативными диалогами? :) Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: CroCIV от Ноября 26, 2009, 14:00 Вот тебе пример как можно сделать. Считай что "Work Path" - выбор файла Я не знаю чем заполнить оставшееся пространство формы ))) я об этом думал у меня в других модулях программы так и реализовано... а тут вот хз чо вставить, мб какуюнить анимированную заставку чтоле )))))) Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: BRE от Ноября 26, 2009, 14:02 А как быть с нативными диалогами? :) А нативный можно встроить?Если Да, то никак. :) Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 14:03 ну... можно и на финиш повесить не вопрос, но мне не нравится факт мерцания окошек... одно уничтожается, второе тут же рисуется, чтоб через пару секунд тоже быть закрытым... как-то это.. костылеподобно как-то :) Нет, вызов именно диалога для выбора файла - это как раз стандартно! И это всем будет понятно. А вот встраивание дилога выбора файла прямо в страницу визарда приводит в замешательство. Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: CroCIV от Ноября 26, 2009, 14:05 Можно попробовать найти эту кнопку по имени (если это имя указано). Метод: QList<T> QObject::findChildren ( const QString & name = QString() ) const Код: // Вернет список кнопок на dlg с именем cancel Точнее найти сначала QButtonBox (его имя на диалоге "buttonBox" ), а в нем уже отключить кнопку Cancel. кстати не пробовал, забыл совсем что у QObject есть такая фича ::) щас попробую поискать, спс Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 14:11 Кстати, если сохранение - последний шаг, то лучше будет повесить вызов диалога на "Finish" у визарда, но обозвать кнопку как "Save". А на этой последней странице отобразить некоторый "Info/Log" того что сохраняется.
Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: BRE от Ноября 26, 2009, 14:18 Я делаю как предложил Spectre c диалогом Work Path. И ничего, если страница будет не сильно заполнена. Всегда можно добавить какую-то информацию для юзера, режимы сохранения и т.д.
В твоем случае, даже если отключить Cancel, пользователю нужно догадаться нажимать Ok на диалоге, и только после этого будет включиться кнопка Finish. Не очень удобно. Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: CroCIV от Ноября 26, 2009, 14:30 Кстати, если сохранение - последний шаг, то лучше будет повесить вызов диалога на "Finish" у визарда, но обозвать кнопку как "Save". А на этой последней странице отобразить некоторый "Info/Log" того что сохраняется. хм... вариант, а форму закрывать по кнопке отмена, которую переименовываем в "закрыть"... но пользователи выбрали первый вариант findChildren<QPushButton *>() возвращает список на две безымянные кнопки - первая сохранить/ок, вторая отмены Ребят, спасибо :) Название: Re: QDialog получить указатели на дочерние виджеты, в частности на кнопки Ок/Отмена Отправлено: spectre71 от Ноября 26, 2009, 14:39 Кстати, если сохранение - последний шаг, то лучше будет повесить вызов диалога на "Finish" у визарда, но обозвать кнопку как "Save". А на этой последней странице отобразить некоторый "Info/Log" того что сохраняется. хм... вариант, а форму закрывать по кнопке отмена, которую переименовываем в "закрыть"... но пользователи выбрали первый вариант findChildren<QPushButton *>() возвращает список на две безымянные кнопки - первая сохранить/ок, вторая отмены Ребят, спасибо :) Непереносимо ! Очередной релиз QT может это поломать. :) Лучше тебе сделать вызов диалога на "Save"("Finish") Визарда, но при нажатии в диалоге на "Save" закрывать его и Визард. |