2016-06-23 2 views
1

В Qt я пытаюсь добавить некоторые ярлыки в свой графический интерфейс. Я могу сделать это просто deffining каждой из клавиш, как это и то, как они их соответствующей функции:Lambda выражение при срабатывании ярлыка (Qt)

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

Линия сверху работает, как ожидалось. Однако я хотел бы избежать создания различных функций для каждой из ярлыков. Вот почему я хотел бы использовать лямбда-выражения. Я Тринг, чтобы сделать это немного кода работы:

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

Однако connect сверху не допускается. Как я могу это решить?

ответ

3

Может быть, вы должны использовать новый синтаксис стиля, как:

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

Reference

0

Это, как я это сделать с C++ 11 лямбда-синтаксисом:

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