2014-01-14 4 views
0

Как слить KeyReleaseEvent и QPushButton с помощью signal. Я имею в виду, что каждый раз, когда пользователь будет нажимать клавишу ввода, вы должны вызвать некоторую функцию, используя SLOT. Так что я должен использовать в сигнале?Как слить KeyReleaseEvent с кнопкой

void mywindow::keyReleaseEvent(QKeyEvent *event) 
{ 
    switch(event->key()) 
    { 
     case Qt::Key_Enter: 
      connect(button1, SIGNAL(clicked()), this, SLOT(fileNew())); 
      connect(button2, SIGNAL(clicked()), this, SLOT(file())); 
     break; 
    } 
} 

ответ

0

Если я правильно понял ваш вопрос, вы хотите нажать кнопку при нажатии клавиши ввода. Вы можете просто вызвать функцию QAbstractButton::click() для выполнения щелчка.

connect(button1,SIGNAL(clicked()),this,SLOT(fileNew())); 
connect(button2,SIGNAL(clicked()),this,SLOT(file())); //do this in your constructor, or somewhere else.. just make sure you only do this once 

void mywindow::keyReleaseEvent(QKeyEvent *event) 
{ 
    switch(event->key()) 
    { 
     case Qt::Key_Enter: 
      button1->click();  
     break;  
    } 
} 
+0

-1: Как насчет 'button2' и как насчет динамических соединений? – RedX

+0

Вы можете использовать hasFocus() и проверить, находится ли фокус кнопки в кнопке 1 или 2, а затем называть эту кнопку нажатием() – Rupesh

+0

@RedX. Что относительно динамических подключений? ОП не задавал ничего подобного. И 'button2' работает одинаково. Я продемонстрировал, как нажимать кнопку программно. – thuga

0

Существует shortcut свойство обрабатывать такой случай.
Я рекомендую использовать QAction с shortcut значением. Потеряна бонусная функциональность.