2015-04-28 6 views
0

Я использую QMainWindow с несколькими QLineEdits и с некоторыми QPushButtons. Когда фокус находится в QLineEdit (если я напечатаю что-то в QLineEdit), и если я нажму клавишу F5, я хочу показать QDialog.Как перенести фокус с QLineEdit на редактируемую ячейку QTableView

Это QDialog содержит QTableView. Мой вопрос: когда я нажимаю клавишу F5, я хочу переместить фокус с QLineEdit на ячейку QTableView. Как я могу это достичь?

+0

Можете ли вы указать код ваших предыдущих попыток установить фокус на конкретную ячейку и рассказать нам, что именно с ним происходит? – Bowdzone

ответ

1

Подкласс QLineEdit и переопределить keyPressEvent(), чтобы определить, когда нажата клавиша F5, или установите фильтр событий на QLineEdit.

Если вы создадите и покажите диалог во время обработки события ключа, диалоговое окно автоматически получит фокус в событии, и первый виджет в диалоговом окне, который принимает фокус, будет виджем в фокусе. Поэтому либо пусть QTableView будет первым виджетами, либо явно выделит его, используя setFocus().

Если диалоговое окно уже построено или является немодальным диалогом, который уже открыт, вам нужно указать указатель на диалог, чтобы вы могли показать его/дать ему фокус при нажатии клавиши F5.

Если вы хотите перейти в определенную ячейку в QTableView, вам, конечно же, также необходимо знать ячейку, связанную с вашим QLineEdit.

+0

Спасибо за предложение Daniel Hedberg. Это очень помогло мне. У меня есть еще один вопрос. Как фокус изменится, если я использую QWidget вместо QDialog. Я знаю, что QDialog автоматически получает фокус. Но как насчет QWidget? –

+0

Вам нужно иметь указатель на виджет, чтобы вы могли его сфокусировать, вызвав widget-> setFocus(). Если вы нашли мой ответ полезным, не стесняйтесь принять его и/или повысить его. Благодарю. –

+0

Ваш ответ был действительно полезен, и я попробовал, и он работает. Когда я закрываю дочерний виджет, я хочу вернуть фокус на QLineEdit (но это больше не работает). –

Смежные вопросы