2012-02-01 2 views
1

Мне было интересно, если кто-нибудь знает, как настроить несколько ярлыков для одной кнопки. Например, у меня есть QPushButton, который я хочу связать с ключом Return и клавишей Enter (клавиатурой и цифровой клавиатурой).Несколько быстрых клавиш для setShortcut

Если в конструкторе я ставлю в контекстном поле:

Return, Enter 

только Enter реагирует, а не возврат.

Я также попытался просто установить Return в конструкторе и в моем исходном коде я помещал в:

ui.searchButton->setShortcut(tr("Enter")); 

Это также, кажется, реагируют только на Enter (цифровая клавиатура) не Return (клавиатуры).

Кто-нибудь знает, как установить более одного ярлыка на QPushButton? FYI Я использую Qt4.7.

ответ

1

Кажется, что это небольшое обходное решение, но вы можете использовать набор QAction несколько shortcuts on it и подключить его к QPushButton. (Аналогично, вы можете создать несколько объектов QShortcut и подключить их к кнопке.)

1

Я не работаю с QtCreator, так что вот 2 решения для кода, которые у меня возникли бы для этой проблемы.


1.
Для тех случаев, я перезаписать keyPressEvent (например, из главного окна или где вы хотите, чтобы ярлык быть).

Заголовок:

protected: 
    virtual void keyPressEvent(QKeyEvent* e); 

Источник:

void main_window::keyPressEvent(QKeyEvent* e) 
{ 
    switch(e->key()) 
    { 
    case Qt::Key_Enter: 
    case Qt::Key_Return: 
     // do what you want, for example: 
     QMessageBox::information(this, 
      "Success", 
      "Let me guess, you pressed the return key or the enter key."); 
     break; 
    default: 
     ; 
    } 

    QMainWindow::keyPressEvent(e); 
} 

2.
Я думаю, что это также можно создавать и подключать несколько QShortcut ojects. Просто создайте все необходимые ярлыки и соедините их activated -Signal с слотом объекта, который вы хотите получить.

1

Как qt noob, я искал способ добавить несколько ярлыков к одной кнопке. Ответы здесь были полезны, но мне все же пришлось немного потрудиться, чтобы собрать все части вместе. Поэтому я думал, что буду публиковать полный ответ здесь, надеюсь, помочь другим noobs, которые придут за мной.

Прошу прощения, что это написано в PyQt, но я верю, что это передаст идею.

# Create and setup a "Find Next" button 
find_next_btn = QtGui.QPushButton("  Find &Next") 
# setupButton is a small custom method to streamline setting up many buttons. See below. 
setupButton(find_next_btn, 150, "Icons/arrow_right_cr.png", 30, 20, "RTL") 
find_next_btn.setToolTip("Search DOWN the tree") 
find_next_btn.clicked.connect(find_next) 
# find_next is the method executed when the button is pressed 

# Create an action for the additional shortcuts. Alt+N is already set 
# by "&" in "Find &Next" 
find_next_ret_act = QtGui.QAction(self, triggered=find_next_btn.animateClick) 
find_next_ret_act.setShortcut(QtGui.QKeySequence("Return")) 

find_next_enter_act = QtGui.QAction(self, triggered=find_next_btn.animateClick) 
find_next_enter_act.setShortcut(QtGui.QKeySequence("Enter")) 

# Now add (connect) these actions to the push button 
find_next_btn.addActions([find_next_ret_act, find_next_enter_act]) 


# A method to streamline setting up multiple buttons 
def setupButton(button, btn_w, image=None, icon_w=None, icon_h=None, layout_dir=None): 
    button.setFixedWidth(btn_w) 
    if image != None:    
     icon = QtGui.QIcon() 
     icon.addPixmap(QtGui.QPixmap(image)) 
     button.setIcon(icon) 
    if icon_w != None: 
     button.setIconSize(QtCore.QSize(icon_w, icon_h)) 
    if layout_dir == "RTL": 
     find_next_btn.setLayoutDirection(QtCore.Qt.RightToLeft) 

Вот результирующая кнопка: http://i.stack.imgur.com/tb5Mh.png (как нуб, я не разрешается вставлять картинки прямо в сообщение.)

Я надеюсь, что это полезно.

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