Название: QLineEdit Отправлено: Григорий от Март 28, 2012, 11:12 Уважаемые форумчане , подскажите как выкрутится , для редактирования однострочной строки используют виджет QlineEdit , а у него отсутсвует сигнал clicked(), чем его можно заменить или какой аналог найти виджету чтобы он срабатывал на клик мыши?
Название: Re: QLineEdit Отправлено: sudo от Март 28, 2012, 11:18 Отловить событие mouseEvent
Название: Re: QLineEdit Отправлено: Григорий от Март 28, 2012, 11:24 Название: Re: QLineEdit Отправлено: sudo от Март 28, 2012, 11:30 Код
Название: Re: QLineEdit Отправлено: Alex_C от Март 28, 2012, 15:19 а можно намек на пример Книга Марк Шлее "Qt.Программирование на C++". Глава 15 "Фильтры событий". Книга есть в инете. Очень советую! Там кстати в примере как раз QLineEdit+MouseFilter - то, что Вам надо! Название: Re: QLineEdit Отправлено: GreatSnake от Март 28, 2012, 15:24 А не проще перегрузить QLineEdit?
Код
Название: Re: QLineEdit Отправлено: sudo от Март 28, 2012, 15:31 Неа. Плодишь ещё один класс и кода больше :) И таскать его придётся за собой
Название: Re: QLineEdit Отправлено: GreatSnake от Март 28, 2012, 15:43 Неа. Плодишь ещё один класс и кода больше :) И таскать его придётся за собой А eventFilter() таскать не нужно что-ли? Имхо, eventFilter() это хак.Название: Re: QLineEdit Отправлено: Alex_C от Март 28, 2012, 15:47 А что делать, если форма уже нарисована (или рисовать ее хочется) в QtDesigner? :)
Свои компоненты туда вставлять. Кстати, почему это хак? На мой взгляд, хак - использование недокументированных методов. Тут же все легально! Название: Re: QLineEdit Отправлено: Пантер от Март 28, 2012, 15:49 А что делать, если форма уже нарисована (или рисовать ее хочется) в QtDesigner? :) Есть promoteTo.Свои компоненты туда вставлять. Кстати, почему это хак? На мой взгляд, хак - использование недокументированных методов. Тут же все легально! Название: Re: QLineEdit Отправлено: sudo от Март 28, 2012, 15:56 А eventFilter() таскать не нужно что-ли? Имхо, eventFilter() это хак. Не вижу смысла писать что-то, что можно легко сделать стандартными средствами Название: Re: QLineEdit Отправлено: GreatSnake от Март 28, 2012, 16:00 Не вижу смысла писать что-то, что можно легко сделать стандартными средствами С чего это eventFilter() стал стандартным средством?К тому же он решает задачу только для одного конкретного виджета. А если их на форме с десяток? Название: Re: QLineEdit Отправлено: GreatSnake от Март 28, 2012, 16:04 Кстати, почему это хак? На мой взгляд, хак - использование недокументированных методов. Тут же все легально! Да, легальный, но хак)Название: Re: QLineEdit Отправлено: sudo от Март 28, 2012, 16:21 С чего это eventFilter() стал стандартным средством? К тому же он решает задачу только для одного конкретного виджета. А если их на форме с десяток? Если это есть public API Qt, то почему это не стандартное средство? Да хоть миллион, всё зависит от задачи и трудоёмкости Название: Re: QLineEdit Отправлено: m_ax от Март 28, 2012, 16:33 Я тоже за eventFilter)
Это более гибкое решение в данном случае) Название: Re: QLineEdit Отправлено: GreatSnake от Март 28, 2012, 16:42 Я тоже за eventFilter) Вот именно, что для данного случая. Но с точки зрения проектирования это костыль.Это более гибкое решение в данном случае) Название: Re: QLineEdit Отправлено: Dr.Vlad от Апрель 02, 2012, 19:36 А что делать, если форма уже нарисована (или рисовать ее хочется) в QtDesigner? :) Свои компоненты туда вставлять. Кстати, почему это хак? На мой взгляд, хак - использование недокументированных методов. Тут же все легально! Запросто можно вставить писаный класс вместо оригинального QLineEdit в ui_class.h (только, естессна, перед сборкой под релиз, поскольку первая же очистка обнулит сие деяние) или же в конструкторе блок QGridLayout ваять. Название: Re: QLineEdit Отправлено: kambala от Апрель 02, 2012, 20:17 Запросто можно вставить писаный класс вместо оригинального QLineEdit в ui_class.h запросто можно преобразовать QLineEdit в писаный класс в дизайнереНазвание: Re: QLineEdit Отправлено: Странник от Апрель 03, 2012, 09:51 запросто можно преобразовать QLineEdit в писаный класс в дизайнере плюсадин. лучше унаследоваться и сигнал прикрутить, чем при каждой необходимости городить eventFilter'ы.Название: Re: QLineEdit Отправлено: Dr.Vlad от Апрель 03, 2012, 20:00 class LineEdit : public QLineEdit
{ Q_OBJECT public: LineEdit( QWidget* parent = 0 ) : QLineEdit( parent ) {} Q_SIGNALS: void clicked(); protected: void mousePressEvent( QMouseEvent* e ) { QLineEdit::mousePressEvent( e ); emit clicked(); } }; Как будто бы здесь eventFilter НЕ используется... У нас на работе через installEventFilter всё делают, хотя сама по себе текстовка любопытная, (так или почти так оригинальные troll классы сделаны), запомню. Название: Re: QLineEdit Отправлено: Bepec от Апрель 03, 2012, 22:03 Ну как бы этот слот уже определён. А не прогоняет сквозь себя ВСЕ сигналы повторно.
Название: Re: QLineEdit Отправлено: _OLEGator_ от Апрель 04, 2012, 10:24 У нас на работе через installEventFilter всё делают И это, имхо, не правильно. Этот механизм скорее для тех, кому влом создавать наследника и там обрабатывать все события, а так было бы правильнее. Название: Re: QLineEdit Отправлено: andrew.k от Апрель 05, 2012, 00:25 У нас на работе через installEventFilter всё делают И это, имхо, не правильно. Этот механизм скорее для тех, кому влом создавать наследника и там обрабатывать все события, а так было бы правильнее. Нормальный стандартный механизм. Название: Re: QLineEdit Отправлено: Bepec от Апрель 05, 2012, 07:11 installEventFilter грузит форму и сигналы. Так же при большом количестве обрабатываемых сигналов (свич из 8 спец элементов допустим), становится сборищем пересекающихся условий и непоняток.
Конечно, если все программисты аккуратны, пишут комментарии и не втыкают через пару дней туда новую функцию, всё будет нормально. Но где ж вы таких видели? :D Название: Re: QLineEdit Отправлено: _OLEGator_ от Апрель 05, 2012, 10:37 Не влом, а кому это не нужно. Нормальный стандартный механизм. Не нужно = влом. Быстро что-то написать, чтобы работало, наплевав на повторное использование кода. При нормальном проектировании и разработке - надо отдельный класс писать и логику встраивать в него, а не мешать все в кучу. Такой коробочный элемент может быть легко повторно использован. Конечно, наверняка есть ситуации, когда использование installEventFilter оправдано, но в данном случае это как раз противопоказано. Название: Re: QLineEdit Отправлено: andrew.k от Апрель 05, 2012, 10:54 Не влом, а кому это не нужно. Конечно, наверняка есть ситуации, когда использование installEventFilter оправдано, но в данном случае это как раз противопоказано.Нормальный стандартный механизм. Просто начало формироваться мнение, что это какой-то ущербный подход. Словно это GOTO, который есть, но лучше не ипользовать. Это не так. |