【问题标题】:Lambda expression when shortcut triggered (Qt)快捷键触发时的 Lambda 表达式 (Qt)
【发布时间】:2016-06-23 16:05:12
【问题描述】:

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

【问题讨论】:

    标签: c++ qt lambda signals-slots


    【解决方案1】:

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

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

    Reference

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 2022-07-27
        • 2019-12-30
        • 2011-01-03
        • 2017-04-26
        • 2020-02-06
        • 1970-01-01
        相关资源
        最近更新 更多