触发快捷方式时的 Lambda 表达式 (Qt)

Lambda expression when shortcut triggered (Qt)

在 Qt 中,我正在尝试向我的 GUI 添加一些快捷方式。我可以通过像这样定义每个快捷方式然后将它们喜欢到它们各自的功能来简单地做到这一点:

QObject::connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_B), this), SIGNAL(activated()), this, SLOT(myFunc()));

上面的行按预期工作。但是,我想避免为每个快捷方式创建不同的功能。这就是为什么我想使用 lambda 表达式。我正在尝试让这段代码起作用:

QShortcut *shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_B), this);
QObject::connect(shortcut, SIGNAL(activated()), [=]() 
{
    myFunc();
});

但是,上面的connect是不允许的。我该如何解决?

也许你应该使用新式语法,如:

QObject::connect(shortcut, &QShortcut::activated, [=]() 
{
    myFunc();
});

Reference

这就是我使用 C++11 lambda 语法的方式:

QObject::connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q),  this), &QShortcut::activated, [=](){    this->close();  });

这就是我使用(先前声明的)插槽的方式:

QObject::connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_T),  this), &QShortcut::activated, this, &ClassName::fancySlot);