Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пантер от Декабрь 13, 2007, 12:17



Название: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 13, 2007, 12:17
В общем есть диалог, на нем QDialogButtonBox с двумя кнопками Ok и Cancel. При нажатии Enter срабатывает accept, а как от этого избавится? Пытался вылавливать кнопку Ok и ставить ей setAutoDefault(false), не помогает. Что нужно сделать?


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: WW от Декабрь 13, 2007, 12:50
Я в таких случаях делаю свой диалог. Полный контроль над полетом.


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Barmaglodd от Декабрь 13, 2007, 15:07
А еще вызвать у неё (кнопки Ok) setDefault (false) не пробовали?


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 13, 2007, 18:47
А еще вызвать у неё (кнопки Ok) setDefault (false) не пробовали?
Пробовал, не помогает. :(


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 13, 2007, 18:48
Я в таких случаях делаю свой диалог. Полный контроль над полетом.
Дык у меня свой диалог, что мне сделать? Может QDialogButtonBox заменить на обычные пушбатоны? (хотя неохота что-то)


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: ритт от Декабрь 13, 2007, 20:58
а энтер точно на кнопке срабатывает? а то бы я предположил, что искэйп тоже на пашбаттон биндится...
однако, смотреть следует в сторону кудалога


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Barmaglodd от Декабрь 14, 2007, 11:16
Ассистант пишет:
the first push button with the accept role is made the default button when the QDialogButtonBox is shown
Может ваши вызовы setAutoDefault(false) и т.п. происходят до того, как QDialogButtonBox сам выбирает дефолтную кнопку?


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 14, 2007, 12:25
setAutoDefault вызываю после создания QDialogButtonBox.
искэйп тоже биндится.
Неужели придется у диалога перехватывать нажатие энтера???


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Emc от Декабрь 14, 2007, 12:37
а смысл отказываться от enter'a - обычно это удобно, если что можно всегда accept переописать


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 14, 2007, 12:41
а смысл отказываться от enter'a - обычно это удобно, если что можно всегда accept переописать
Иногда по запарке нажимаешь ентер и.... в бд идут неполные данные. Пришлось писать обработчик, который проверяет на заполненность данными, но не нравится мне такое.


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: WW от Декабрь 14, 2007, 13:13
Иногда по запарке нажимаешь ентер и.... в бд идут неполные данные. Пришлось писать обработчик, который проверяет на заполненность данными, но не нравится мне такое.
Это нормально при работе с БД - еще на клиенте контролировать заполнение данных. Потом искать неполные данные - еще хуже.


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Sergeich от Декабрь 14, 2007, 15:48
Поставь event filter на диалог


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 15, 2007, 14:47
Поставь event filter на диалог
Так скорее всего и сделаю. Думал есть решение попроще.


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Sergey B. от Декабрь 15, 2007, 17:24
enum QDialogButtonBox::ButtonRole
This enum describes the roles that can be used to describe buttons in the button box. Combinations of these roles are as flags used to describe different aspects of their behavior.



Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Dodge от Декабрь 15, 2007, 19:58
По моиму проще всего на диалог (виджет) повесить шорткат пустой...


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 19, 2007, 19:27
Кому интересно, сделал так:
Код:
void MyDialog::keyPressEvent ( QKeyEvent * event )
{
    QWidget::keyPressEvent ( event )
}
Работает. Всем спасибо.


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: pastor от Декабрь 19, 2007, 19:34
2 panter_dsd: А если сделать так?

Код:
void MyDialog::keyPressEvent ( QKeyEvent * event )
{
    event->ignore();
}


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 19, 2007, 19:39
А зачем? И так работает. Что это изменит?


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: ритт от Декабрь 19, 2007, 19:57
то есть, стандартные горячие клавиши навсегда кастрировал?
а почему бы просто на аксепт/режект не спрашивать юзверя уверен ли он?


Название: Re: [4.3.3] Как запретить по Enter срабатывать у диалога Accept?
Отправлено: Пантер от Декабрь 19, 2007, 20:04
Просто у меня на панели есть несколько кнопочек на которые приятнее не кликать, а нажимать Ентер. Раньше Ентер сразу перехватывал диалог. Вот так.