触发快捷方式(QT)时的lambda表达

Lambda expression when shortcut triggered (Qt)

本文关键字:时的 lambda 表达 QT 快捷方式      更新时间:2023-10-16

在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();
});

参考

这就是我使用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);