Как установить фокус ввода для отображаемого диалога в Qt? - PullRequest
7 голосов
/ 25 мая 2010

В слоте нажатия кнопки я создаю и exec() диалог с родительским элементом NULL. Внутри конструктора диалога у меня есть:

this->activateWindow();
this->raise();
this->setFocus();

Диалог является модальным для приложения и имеет сильный фокус. Тем не менее, он не реагирует на события клавиатуры, пока я не нажму на него. Как сделать так, чтобы диалог получал фокус без необходимости щелкать по нему?

Ответы [ 3 ]

5 голосов
/ 26 мая 2010

Проблема заключалась в том, что я устанавливал флаг окна Qt: Tool. Использование Qt :: Popup или Qt :: Window вместо этого приведет к тому, что фокус ввода автоматически устанавливается при отображении диалогового окна.

Я сам использовал Qt :: Window. Некоторые другие флаги, вероятно, также будут работать, но главное, что QDialog с флагом Qt :: Tool будет , а не автоматически устанавливать фокус ввода при отображении диалогового окна.

0 голосов
/ 14 июля 2014

В моем случае даже настройки Qt :: Window не сработали. Я должен был

QMetaObject::invokeMethod(widgetToFocus, "setFocus", Qt::QueuedConnection);

до show() или exec().

0 голосов
/ 25 мая 2010

Установите фильтр событий для диалогового окна.

classObject->installEventFilter(this);

void className::keyPressEvent(QKeyEvent *event)
{
   if (event->key() == Qt::Key_Space) 
    {
   focusNextChild();
    }
   else 
   {
  QLineEdit::keyPressEvent(event);
   }
}

для получения дополнительной информации см. Здесь. http://doc.trolltech.com/4.6/eventsandfilters.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...