Подтвердить что ты не робот

Как программировать специальные сочетания клавиш

У меня есть приложение Qt для Linux.

Я хотел бы запрограммировать специальные сочетания клавиш, такие как CTRL - Q, которые затем вызовут подпрограмму, которая покидает программу.

Как я могу это сделать?

4b9b3361

Ответ 1

Попробуйте следующее:

new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this, SLOT(close()));

Вы можете создать его в конструкторе вашей формы. Это позволяет избежать загрязнения вашего класса указателем на доступ к ярлыку. Возможно, вам захочется добавить указатель на ярлык, если вы хотите получить к нему доступ позже. Ярлык будет удален, когда приложение завершит работу, так как оно является родительским. Он автоматически устанавливает соединение, вам не нужно делать это вручную.

Также обратите внимание, что в Windows по умолчанию нет последовательности Ctrl + Q, но есть одна в Linux и MacOS.

Ответ 2

Так как CTRL-Q может иметь элемент меню или элемент панели инструментов, тоже думаю, что вы ищете QAction.

Смотрите это: http://doc.qt.digia.com/4.6/qaction.html#shortcut-prop

LE:

Пример QAction на работе:

QAction *foo = new QAction(this);
foo->setShortcut(Qt::Key_Q | Qt::CTRL);

connect(foo, SIGNAL(triggered()), this, SLOT(close()));
this->addAction(foo);

Просто создайте новый проект GUI GUI (я использовал QtCreator) и добавлю этот код в конструктор главного окна, и он должен работать как ожидалось.

Обратите внимание: нет необходимости освобождать память, так как среда Qt позаботится об этом, когда приложение закроется.

Ответ 3

это образец для создания меню файла и действия выхода и соединения между сигналом и слотом.

QMenu *fileMenu = new QMenu(trUtf8("&File"));
QAction *actionExit = new QAction(tr("E&xit"));    
//set "ctrl+q shortcut for exit action
actionExit->setShortcut(tr("CTRL+Q"));
//connect triggered signal of actionExit to close slot
connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
//add actionExit into file menu
fileMenu->addAction(actionExit);

Ответ 4

Для современного Qt (5.9 на данный момент):

void MainWindow::bootStrap()
{
    // create shortcut
    QShortcut *shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);

    // connect its 'activated' signal to your function 'foo'
    QObject::connect(shortcut,    &QShortcut::activated,
                     this,        &MainWindow::foo);
}

// somewhere in the code, define the function 'foo'
void MainWindow::foo()
{
    qDebug() << "Ctrl+Q pressed.";
}

Не забывайте #include <QShortcut>.

Дополнительная информация: http://doc.qt.io/qt-5/qshortcut.html