Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: serg_hd от Июня 09, 2011, 19:35



Название: [решено] Закрывать диалог только программно
Отправлено: serg_hd от Июня 09, 2011, 19:35
Собственно весь вопрос в заголовке темы. Есть QDialog (модальный для всего application), у него есть флаги Qt::CustomizeWindowHint и Qt::WindowTitleHint - чтоб никаких кнопок не было и надо иметь возможность закрыть его только программно (чтобы alt+f4 и esc его тоже не закрывали). Сам по себе это диалог ввода логина/пароля и если данные не верны, то дальше не пускает, обычное дело вобщем-то.

п.с.
и не хотелось бы перегружать keyPressEvent() и там фильтровать нажатия, мало ли как ещё можно закрыть


Название: Re: Закрывать диалог только программно
Отправлено: BRE от Июня 09, 2011, 19:42
Собственно весь вопрос в заголовке темы. Есть QDialog (модальный для всего application), у него есть флаги Qt::CustomizeWindowHint и Qt::WindowTitleHint - чтоб никаких кнопок не было и надо иметь возможность закрыть его только программно (чтобы alt+f4 и esc его тоже не закрывали). Сам по себе это диалог ввода логина/пароля и если данные не верны, то дальше не пускает, обычное дело вобщем-то.
Так не бывает.  :)
Если пользователь хочет запустить программу и знает пароль, то он его вводит и жмет Ок, а если не хочет/не знает, то жмет Отказ (Alt+F4, Esc) и приложение закрывается.


Название: Re: Закрывать диалог только программно
Отправлено: BRE от Июня 09, 2011, 19:43
и не хотелось бы перегружать keyPressEvent() и там фильтровать нажатия, мало ли как ещё можно закрыть
Alt+F4 ты никак в приложении не поймаешь.


Название: [решено] Закрывать диалог только программно
Отправлено: serg_hd от Июня 09, 2011, 19:48
хотя да, по closeEvent() диалога можно закрыть приложение же.
А то я что-то застопорился именно на кнопке "отмена" диалога)). Пару суток не спал, голова болит, потому и соображается не шибко.
Пасиб


Название: Re: [решено] Закрывать диалог только программно
Отправлено: serg_hd от Июня 09, 2011, 19:57
Хотя это будет работать только для alt+f4. Для esc допишу
Код
C++ (Qt)
void MyClass::keyPressEvent(QKeyEvent* event)
{
if (event->key() == Qt::Key_Escape)
 this->QDialog::close();
}
 
такой подход правильный же, надеюсь, будет