2016-06-23 17 views
1

In Qt, ich versuche, einige Shortcuts zu meiner GUI hinzuzufügen. Ich kann es einfach tun, indem jeder der Verknüpfungen wie diese deffining und dann, wie sie zu ihrer jeweiligen Funktion:Lambda Ausdruck, wenn Verknüpfung ausgelöst (Qt)

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

Die Linie von oben wie erwartet funktioniert. Ich möchte jedoch vermeiden, verschiedene Funktionen für jede der Verknüpfungen zu erstellen. Deshalb würde ich gerne Lambda-Ausdrücke verwenden. Ich bin Tring dieses Stück Code funktioniert:

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

jedoch die connect von oben ist nicht erlaubt. Wie kann ich das lösen?

Antwort

3

Vielleicht sollten Sie neue Art Syntax verwenden wie:

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

Reference

0

Dies ist, wie ich es mit C++ 11 Lambda-Syntax:

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

Und so Ich mache es mit einem (zuvor deklarierten) Slot:

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