Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: poru от Февраль 10, 2015, 16:13



Название: QInputDialog - дополнительный виджет
Отправлено: poru от Февраль 10, 2015, 16:13
Можно ли (как) вставить дополнительный виджет в QInputDialog между виджетом ввода (QLineEdit) и кнопками?


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Пантер от Февраль 10, 2015, 16:16
Можно написать свой.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: poru от Февраль 10, 2015, 16:22
45kb кода от разработчиков в топку! Нафига layout заносить в приват? Вот я хочу для QSpinBox'а туда кнопочки с цифирями засунуть и мышкой по ним кликать, а то лень до клавы тянуться.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Bepec от Февраль 10, 2015, 16:24
Безумные желания в 45кб кода не умещаются :)


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Пантер от Февраль 10, 2015, 16:28
Ага, давай все в паблик выносить.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Old от Февраль 10, 2015, 16:31
45kb кода от разработчиков в топку! Нафига layout заносить в приват? Вот я хочу для QSpinBox'а туда кнопочки с цифирями засунуть и мышкой по ним кликать, а то лень до клавы тянуться.
Вы о каком layout говорите? В каком месте он стал приватным?


Название: Re: QInputDialog - дополнительный виджет
Отправлено: gil9red от Февраль 10, 2015, 16:37
45kb кода от разработчиков в топку! Нафига layout заносить в приват? Вот я хочу для QSpinBox'а туда кнопочки с цифирями засунуть и мышкой по ним кликать, а то лень до клавы тянуться.

может можно сделать findChild и найти используемый layout?


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Пантер от Февраль 10, 2015, 16:44
Код
C++ (Qt)
QLayout * QWidget::​layout() const
 
Но это слишком костыльный путь. Лучше уж свой написать.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Old от Февраль 10, 2015, 17:37
Код
C++ (Qt)
QLayout * QWidget::​layout() const
 
Но это слишком костыльный путь. Лучше уж свой написать.
Зачем писать свой? Почему не использовать layout из QWidget?


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Пантер от Февраль 10, 2015, 22:17
От какого виджета? А если будут несколько лайотов? Кто тебе дает гарантию, что внутренняя часть не поменяется?


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Old от Февраль 10, 2015, 22:25
От какого виджета? А если будут несколько лайотов? Кто тебе дает гарантию, что внутренняя часть не поменяется?
Я так понимаю, ТС хочет добраться до layout'а самого.
Несколько лайотов быть не может, он всегда один, но может содержать дочерние слои.
А по внутренней части никто гарантий дать не сможет, все на свой страх и риск.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Пантер от Февраль 10, 2015, 22:38
Вот в том и дело, нужный ему лайот может лежать в другом лайоте. Правильнее будет свою реализацию сделать.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: vbv от Февраль 11, 2015, 00:47
А взять исходники и посмотреть формирование QInputDialog, и потом найти его по имени.....


Название: Re: QInputDialog - дополнительный виджет
Отправлено: poru от Февраль 11, 2015, 09:02
Я все же добрался до layout'а ... через одно место  :D

Код
C++ (Qt)
   QInputDialog *inputDialog = new QInputDialog(this);
   qDebug() << "a:" << inputDialog->layout();
   QString labelText = inputDialog->labelText();
   qDebug() << "b:" << inputDialog->layout();
   QVBoxLayout *layout = static_cast<QVBoxLayout *>(inputDialog->layout());
   layout->insertWidget(1, new QPushButton("1", this));
   inputDialog->exec();
 


Название: Re: QInputDialog - дополнительный виджет
Отправлено: panAlexey от Февраль 11, 2015, 16:59
Я все же добрался до layout'а ... через одно место  :D
Ну че, пятерка тебе по проктологии. xD


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Igors от Февраль 11, 2015, 17:20
Вот в том и дело, нужный ему лайот может лежать в другом лайоте. Правильнее будет свою реализацию сделать.
Ну а как же прынцыпы? Инкапсуляция, наследование и все такое  :)

Ну че, пятерка тебе по проктологии. xD
Троечка. Лучше так

Код
C++ (Qt)
QInputDialog *inputDialog = new QInputDialog(this);
QPushButton * btn = inputDialog->findChid <QPushButton *>();
if (btn) {
QBoxLayot * layout = dynamic_cast <QBoxLayout *> (btn->parentWidget()->layout());
if (layout)
  layout->insertWidget(1, new QPushButton("1", this));
}
 


Название: Re: QInputDialog - дополнительный виджет
Отправлено: poru от Февраль 12, 2015, 14:24
findChild - ноль возвращает


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Igors от Февраль 12, 2015, 15:52
findChild - ноль возвращает
Добавьте
Код
C++ (Qt)
inputDialog->labelText();
Сразу после создания. Вы уже так делали - зачем спрашивать?  :)


Название: Re: QInputDialog - дополнительный виджет
Отправлено: poru от Февраль 13, 2015, 11:36
Цитировать
Ну а как же прынцыпы? Инкапсуляция, наследование и все такое
Браво! Поддерживаю!

Цитировать
Вы уже так делали - зачем спрашивать?
Во-первых: я ни о чем не спрашивал, а дал конкретное утверждение, что код не рабочий.
Во-вторых: если представляешь исходный код, то не допускай ошибок, иначе тебя не правильно поймут. Береги свой статус.

И еще:
может ли кто-либо вопрос по дополнительному "виджету" переправить разработчикам?

Описание проблемы:
программа разработана для обычного "виндовоза", но  потребитель у себя установил на стену компьютер с сенсорным экраном, т.е. нет "мыши" и "клавы", при этом программа, разработанная в Qt, не распознает присутствие сенсорного экрана, и потребитель хочет, что бы наиболее частые параметры вводились дополнительным выбором именно через дополнительный "виджет", расположенный между строкой ввода и кнопками "OK" и  "Отмена", и именно в QInputDialog, при этом, когда мы с ним (потребителем) общались "виртуальная клава" ему "на хер" не нужна. Таким образом потребитель хочет что бы при вводе целых чисел была только цифровая панелька, а при вводе вещественных - панелька дополнялась точкой и т.д и т.п.

Всю эту "херь" я уже реализовал, но еще раз повторюсь - отправьте, пожалуйста, запрос "разрабам", что бы дали нормальный доступ к layout'у и строке ввода.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Igors от Февраль 13, 2015, 13:17
Во-первых: я ни о чем не спрашивал, а дал конкретное утверждение, что код не рабочий.
Во-вторых: если представляешь исходный код, то не допускай ошибок, иначе тебя не правильно поймут. Береги свой статус.
Не надо злиться, тем более что Вы неправы. Пантер указал что кнопка может находиться в др лайауте, я предложил как это разрулить. Может Вы обиделись что не дали текст под copy/paste - так никто и не обещал.

может ли кто-либо вопрос по дополнительному "виджету" переправить разработчикам?
Ну а почему кто-то за Вас должен переправлять? Заходите в баг тракер и постите. Но я бы этого делать не стал, потому что:

- тот InputDialog самому за полчаса написать, делать это серьезной проблемой и стучаться с этим к разрабам...

- "нормальным" решением является хранение диалога в ресурсах, ну Qt этого не предоставляет. Остается самому искать/добавлять виджеты. Это менее удобно чем интерактивно в редакторе - но суть та же. Не обращайте внимание на гордые заявления типа "через задницу" - это обычное желание поумничать, не более того :) По существу нет никаких аргументов против такого решения, оно ничему не противоречит.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Bepec от Февраль 13, 2015, 13:18
Igors прав, написать данный функционал дело десяти минут. Отладить - ну полдня, чтоб красиво было и все ошибочки обработать.



Название: Re: QInputDialog - дополнительный виджет
Отправлено: poru от Февраль 13, 2015, 14:57
Цитировать
Igors прав, написать данный функционал дело десяти минут...
Bepec, читай еще раз:
Цитировать
Всю эту "херь" я уже реализовал...

Цитировать
Ну а почему кто-то за Вас должен переправлять? Заходите в баг тракер и постите
Да я бы с удовольствием, но у меня нет практики с "инглишом", поэтому и прошу кого-то. А ведь дело-то всего в том, что бы layout был доступен после конструктора.


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Bepec от Февраль 13, 2015, 16:57
А мою реплику прочитай :)
Из-за 10 минут работы вы намереваетесь поднимать исправление :) Стоит ли овчинка выделки?


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Day от Февраль 13, 2015, 22:24
Здорово! Для меня это маленькое открытие. Т.е. можно взять готовый, фирменный виджет типа InputDialog или QColorDialog, и через его layout() понапихать своих кнопочек. В случае с ColorDialog для меня это вполне актуально. Из-за кнопочки "Восстановить стандартный цвет" мне пришлось городить свой класс на QDialog и вообще всячески изощряться. Попробую!


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Bepec от Февраль 13, 2015, 22:34
Как бы это известная практика, вроде даже в примерах есть парочка "впихиваемых" в стандартные виджеты.

:)


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Day от Февраль 13, 2015, 22:46
Как бы это известная практика,
Но для меня, "Самовара", это было приятной неожиданностью...:)


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Igors от Февраль 14, 2015, 09:21
Здорово! Для меня это маленькое открытие. Т.е. можно взять готовый, фирменный виджет типа InputDialog или QColorDialog, и через его layout() понапихать своих кнопочек.
К сожалению, это не проходит для системных диалогов, напр QFileDialog (native)


Название: Re: QInputDialog - дополнительный виджет
Отправлено: Day от Февраль 14, 2015, 12:33
Все получилось. И код стал логичнее.
К сожалению, это не проходит для системных диалогов, напр QFileDialog (native)
Но если нативные флаги не выставлять, то и с QFileDialog все хорошо.