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

时间:2016-06-23 16:05:13

标签: c++ qt lambda signals-slots

在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。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

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

{{1}}

Reference

答案 1 :(得分:1)

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