2009-12-20 6 views
4

У меня есть проблема с Qt 4.6.0 и ярлык для QPushButtons:QPushButton & ярлык

Я хочу, чтобы отобразить специальный текст в QTextEdit, когда пользователь щелкает button, но только тогда, когда button нажата, а скоро, когда он будет выпущен, я хочу, чтобы появился другой текст.

Все работает нормально, но теперь я хочу, чтобы добавить ярлык (скажем F1), чтобы выполнить ту же самую операцию, когда я нажимаю F1 он показывает что-то особенное в QTextEdit «сезам я выпускаю key. Как мне это сделать?

Я добавил ShortCUT на моем button, но когда я нажимаю F1, он мигает, это как до тех пор, как я нажимаю F1, много signals в настоящее время излучается ... Я хочу, чтобы мой QTextEdit изменить, когда я нажимаю F1 и затем меняйте назад, когда я отпустите key ...

Надеюсь, мой вопрос ясен!

Большое спасибо за ваши советы!

ответ

4

Я думаю, что самым простым решением этой проблемы является использование installEventFilter() на родительском объекте (окне) и фильтрация событий QEvent::MouseButtonPress и QEvent::MouseButtonRelease.

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
if (obj == textEdit) { 
    if (event->type() == QEvent::KeyPress) { 
     QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); 
     qDebug() << "Ate key press" << keyEvent->key(); 
     return true; 
    } else { 
     return false; 
    } 
} else { 
    // pass the event on to the parent class 
    return QMainWindow::eventFilter(obj, event); 
} 
} 
+0

Эй, спасибо за ответ! Вы правы, я, наконец, выбрал это решение, но что-то заставляет меня думать, что это не правильный способ ... Дело в том, что QPushButton настроен на реакцию на другое событие в моем приложении, и мне нужно " скопируйте "те реакции на мой ярлык ... Я думаю, что это нарушает принцип DRY, и мне это не очень нравится ... Например, в какой-то момент мой QPushButton отключен, я не хочу делать никакой работы чтобы отключить ярлык, так как ярлык должен быть свойством QPushbutton, и поэтому он должен быть выключен, когда QPushButton выключен. –

+1

Вы правы, это не * чувствую * правильно, но я считаю, что это обычное поведение является экзотическим для характера QPushButton (пользователи ожидают, что он что-то сделает, когда его нажимают один раз, а не на реакцию, когда они нажимают клавишу мыши вниз, не отпуская его). Думаю, до тех пор, пока вам не нужно делать это за несколько сотен кнопок, и это не во всем вашем приложении, это чистый и легко читаемый способ заставить вашу кнопку вести себя по вашему желанию. – BastiBen

+0

Да, я думаю, это правильно, что это не основное поведение QPushButton ... Во всяком случае, я пойду с этим решением ... Спасибо за вашу помощь! –

2

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

+0

В основном это то, что я предложил в своем ответе раньше (см. Ниже). – BastiBen