У меня есть приложение Qt для Linux.
Я хотел бы запрограммировать специальные сочетания клавиш, такие как CTRL - Q, которые затем вызовут подпрограмму, которая покидает программу.
Как я могу это сделать?
У меня есть приложение Qt для Linux.
Я хотел бы запрограммировать специальные сочетания клавиш, такие как CTRL - Q, которые затем вызовут подпрограмму, которая покидает программу.
Как я могу это сделать?
Попробуйте следующее:
new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this, SLOT(close()));
Вы можете создать его в конструкторе вашей формы. Это позволяет избежать загрязнения вашего класса указателем на доступ к ярлыку. Возможно, вам захочется добавить указатель на ярлык, если вы хотите получить к нему доступ позже. Ярлык будет удален, когда приложение завершит работу, так как оно является родительским. Он автоматически устанавливает соединение, вам не нужно делать это вручную.
Также обратите внимание, что в Windows по умолчанию нет последовательности Ctrl + Q, но есть одна в Linux и MacOS.
Так как 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 позаботится об этом, когда приложение закроется.
это образец для создания меню файла и действия выхода и соединения между сигналом и слотом.
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);
Для современного 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