【发布时间】:2013-07-13 15:32:38
【问题描述】:
我在 Linux 上有一个 Qt 应用程序。
我想编写自定义键盘快捷键,例如 CTRL-Q,然后它会调用退出程序的子例程。
我该怎么做?
【问题讨论】:
标签: qt keyboard-shortcuts
我在 Linux 上有一个 Qt 应用程序。
我想编写自定义键盘快捷键,例如 CTRL-Q,然后它会调用退出程序的子例程。
我该怎么做?
【问题讨论】:
标签: qt keyboard-shortcuts
试试这个:
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
乐:
QAction 工作示例:
QAction *foo = new QAction(this);
foo->setShortcut(Qt::Key_Q | Qt::CTRL);
connect(foo, SIGNAL(triggered()), this, SLOT(close()));
this->addAction(foo);
只需创建一个新的 Qt GUI 项目(我使用 QtCreator)并将该代码添加到主窗口的构造函数中,它应该可以按预期工作。
请注意,不需要释放内存,因为 Qt 框架会在应用关闭时处理。
【讨论】:
对于现代 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>。
【讨论】:
这是一个创建文件菜单和退出动作以及信号和插槽之间连接的示例。
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);
【讨论】: