Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Zartul от Октябрь 24, 2012, 16:48



Название: Виртуальная клавиатура не закрывается
Отправлено: Zartul от Октябрь 24, 2012, 16:48
Доброго времени суток!

Сделал виртуальную клавиатуру по примеру с QInputContext

Вроде все отлично работает, но заметил такую особенность
Если вызвать клавиатуру в модальном диалоговом окне, у которого при создании задан родитель

Код
C++ (Qt)
MyDialog dlg( this ); // parent is set
 
dlg.exec();
 

и после этого закрыть это окно, то для моего класса, наследуемого от QInputContext, в функцию filterEvent присылается
событие QEvent::CloseSoftwareInputPanel, по которому я закрываю и клавиатуру

Код
C++ (Qt)
bool MyInputPanelContext::filterEvent(const QEvent* event)
{
   if (event->type() == QEvent::RequestSoftwareInputPanel) {
       updatePosition();
       inputPanel->show();
       return true;
   } else if (event->type() == QEvent::CloseSoftwareInputPanel) {
       inputPanel->hide();
       return true;
   }
   return false;
}
 

Но! если парент не задан

Код
C++ (Qt)
MyDialog dlg( NULL ); // no parent
 
dlg.exec();
 

то после вызова клавиатуры в таком окне, и его закрытия событие QEvent::CloseSoftwareInputPanel не приходит и следственно клавиатуру я не скрываю

Может сталкивался кто с этой проблемой, или объяснить почему так происходит?


Название: Re: ВИртуальная клавиатура не закрывается
Отправлено: mutineer от Октябрь 24, 2012, 16:52
1) нельзя объектам на стеке давать родителя - может случиться двойное удаление


Название: Re: ВИртуальная клавиатура не закрывается
Отправлено: Zartul от Октябрь 24, 2012, 16:59
1) нельзя объектам на стеке давать родителя - может случиться двойное удаление

я знаю, ну код я этот к примеру привел, если надо что бы красиво было пусть там так будет написано :)

Код
C++ (Qt)
MyDialog * dlg = MyDialog( this ); // parent is set
 
dlg->exec();
 


Название: Re: Виртуальная клавиатура не закрывается
Отправлено: mutineer от Октябрь 24, 2012, 17:55
Так объект без родителя на стеке живет или нет?


Название: Re: Виртуальная клавиатура не закрывается
Отправлено: Zartul от Октябрь 25, 2012, 10:01
Так объект без родителя на стеке живет или нет?

все равно в стеке или в куче создано окно, если оно без родителя и закрывается с вызванной виртуальной клавиатурой, событие QEvent::CloseSoftwareInputPanel наследнику QInputContext не присылается

приложил немного модифицированный исходник из экзамплов inputpanel
Если кликнуть по первому радиобатону, то вызывается окно без родителя, если по второму то с родителем.