Создать QAction с ярлыком, не вставляя в меню

#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 никогда не называется. Когда действие вставлено в меню, ярлык работает хорошо. Что я сделал не так?

3

Решение

QAction находится в состоянии покоя, пока вы не вставите его куда-нибудь. Как предположил Ваанчо, используйте QShortcut, Вам нужно создать ярлык для каждого виджета верхнего уровня (окна), в котором вы хотите, чтобы он был активным. Таким образом, если у вас есть 5 окон верхнего уровня, вам понадобится 5 ярлыков, каждое из которых будет иметь одно из окон в качестве родительского.

Там нет способа использовать QShortcut как глобальный ярлык без графического интерфейса. QShortcut активен, только когда связанный с ним виджет имеет фокус. Виджет может быть окном верхнего уровня.

Системные глобальные ярлыки являются предметом этот вопрос.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]