Несколько сочетаний клавиш для setShortcut - PullRequest
1 голос
/ 02 февраля 2012

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

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

Return, Enter

, только Enter отвечает, а не Return.

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 07 мая 2016

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

Я прошу прощения, что это написано на 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 (как нуб, я не могу вставлять картинки прямо в пост.)

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

1 голос
/ 02 февраля 2012

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

1 голос
/ 02 февраля 2012

Я не работаю с 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 объектов.Просто создайте все нужные вам ярлыки и подключите их activated -Сигнал к слоту объекта, для которого вы хотите получить ярлык.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...