2012-03-04 2 views
1

Я знаю, мне нужен фильтр событий для Qt 4 для обработки событий клавиатуры. Но раньше у меня было что-то подобное, без необходимости вручную настраивать это. Я прочитал документацию для него, но мне не удалось установить настройку eater для приложения. Мне не нужны события, управляемые на уровне кнопок.Перемещение между кнопками с событиями клавиатуры

Вот пример кода, который иллюстрирует две кнопки, которые не будут фокусироваться или активироваться, кроме как щелчком мыши. Я бы хотел, чтобы у вас был фокус по умолчанию на одной кнопке, что я могу сделать с button.setFocus(). Я также хотел бы иметь возможность перемещаться по кнопкам, которые активны с помощью вкладок или кнопок вверх/вниз, а затем активировать с помощью ввода/пробела. Проблема в том, что я запутался в том, как ее реализовать. Нужно ли мне наследовать некоторый класс Q * и реализовать класс фильтра событий, а затем установить на объекты? Или есть более простой способ?

#include <QApplication> 
#include <QPushButton> 
#include <QWidget> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QWidget window; 
    window.resize(200, 200); 

    QPushButton quit("Quit", &window); 
    quit.setGeometry(10, 40, 180, 40); 
    QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); 

    QPushButton nothing("Do Nothing", &window); 
    nothing.setGeometry(10, 80, 180, 40); 

    quit.setFocus(); 
    window.show(); 
    return app.exec(); 
} 
+0

Не можете ли вы определить keyPressEvent в своем главном окне? – jdi

+0

@jdi Я не уверен, как это сделать. –

+0

Я понимаю, что вы уже решили свою проблему с настройкой osx, но вы можете прочитать это, чтобы понять события более подробно: http://doc.qt.nokia.com/qq/qq11-events.html – jdi

ответ

1

Вам не нужно ничего делать, чтобы перемещаться между кнопками с помощью клавиш вкладок или клавиш курсора, this is the default behavior.

+0

Да, ух ... код примера, который я разместил, кажется противоречивым этому. Ввод, пробел, вкладка и т. Д. Ничего не делают, даже если я сначала вручную нажму кнопку «Фокус». Работает только щелчок. –

+0

Извините, код примера, который я написал, уже реализует setFocus, что делает пробел «щелчком» кнопки выхода, но в противном случае никакие события клавиатуры ничего не делают. –

+0

Я скомпилировал и запустил ваш код, и я смог перемещаться между двумя кнопками с помощью клавиши вкладок и клавиш управления курсором. Я могу активировать кнопку с пробелом. Если вы добавите 'quit.setDefault (true)', вы можете активировать эту кнопку с помощью клавиши ввода. Это с Windows 7/MinGW/Qt 4.8. –

0

См. QWiget::focusPolicy, чтобы не допустить попадания виджетов.

+0

Я пробовал ' window.setFocusPolicy (Qt :: StrongFocus); 'уже, и это не изменяет поведение. –

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