Примечание: я, как пользователь, ожидал бы, что действие, вызванное кнопкой мыши, будет зависеть от положения. Если это так, следующее становится немного проще.
Qt не может указать такой ярлык.
Вы можете бросить свой собственный, реагируя на события мыши:
- Может быть, у вас есть обработчик событий
mousePressEvent()
,
- или универсальный
eventFilter(QObject *obj, QEvent *evt)
,
- или использовать
QApplication::notify
В каком-то месте вам нужно поймать QMouseEvent *mouseEvt
.
Выберите виджет (или qApp), который максимально необходим.
Там сравните mouseEvt->button()
и mouseEvt->modifiers()
с вашим списком действий и запустите выбранное действие. Когда пользователь выберет другой метод триггера, настройте список действий.
Давайте применим это на практике:
class MainWindow : public QWidget {
Q_OBJECT
public:
QMap<QPair<Qt::MouseButton, Qt::KeyboardModifiers>, QAction*> mapMouseShortcuts;
QAction *pLaunchScript;
MainWindow() : QWidget() {
mapMouseShortcuts.insert(qMakePair(Qt::LeftButton, Qt::ControlModifier), pLaunchScript);
}
void mousePressEvent(QMouseEvent *me) {
QAction *action = mapMouseShortcuts.value(qMakePair(me->button(), me->modifiers()), Q_NULLPTR);
if(action != Q_NULLPTR) {
action->trigger();
me->accept(); // optional
}
// optional:
if(!me->isAccepted()) {
QWidget::mousePressEvent(me);
}
}
};