如何编程自定义键盘快捷键

时间:2013-07-13 15:32:38

标签: qt keyboard-shortcuts

我在Linux上有一个Qt应用程序。

我想编写自定义键盘快捷键,例如 CTRL - Q ,然后调用退出程序的子程序。

我该怎么做?

4 个答案:

答案 0 :(得分:35)

试试这个:

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

您可以在表单的构造函数中创建它。这样可以避免使用指针访问快捷方式来污染类。如果要稍后访问它,您可能仍希望添加指向快捷方式的指针。应用程序退出时将删除该快捷方式,因为它是它的父级。它会自动进行连接,您无需手动进行连接。

另请注意,Windows上没有默认的Ctrl + Q序列,但Linux和MacOS上有一个序列。

答案 1 :(得分:30)

由于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);

只需创建一个新的Qt GUI项目(我使用QtCreator)并将该代码添加到主窗口的构造函数中,它应该按预期工作。

请注意,不需要释放内存,因为Qt框架会在应用程序关闭时处理。

答案 2 :(得分:6)

对于现代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

答案 3 :(得分: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);