#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>
#include <cassert>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction* back = new QAction(this);
back->setVisible(true);
back->setShortcut(QKeySequence("Ctrl+M"));
bool cres = connect(back, SIGNAL(triggered(bool)), this, SLOT(mySlot()));
assert(cres);
}
В этом коде я пытался поймать Ctrl+M
ключевое событие. Я не хочу помещать действие в меню. connect
возвращает истину, но mySlot
никогда не называется. Когда действие вставлено в меню, ярлык работает хорошо. Что я сделал не так?
QAction
находится в состоянии покоя, пока вы не вставите его куда-нибудь. Как предположил Ваанчо, используйте QShortcut
, Вам нужно создать ярлык для каждого виджета верхнего уровня (окна), в котором вы хотите, чтобы он был активным. Таким образом, если у вас есть 5 окон верхнего уровня, вам понадобится 5 ярлыков, каждое из которых будет иметь одно из окон в качестве родительского.
Там нет способа использовать QShortcut
как глобальный ярлык без графического интерфейса. QShortcut
активен, только когда связанный с ним виджет имеет фокус. Виджет может быть окном верхнего уровня.
Системные глобальные ярлыки являются предметом этот вопрос.
Других решений пока нет …