Ich habe einige Probleme beim Versuch, Lambda-Ausdruck zu verwenden, um Verbindungen zwischen einer Drucktaste und einer Funktion herzustellen, die ich aufrufen möchte, wenn ich auf die Schaltfläche klicke.Warum schlägt mein Versuch, eine Drucktaste mit einem Lambda zu verbinden, fehl?
Ich verwende Qt 5.6, mit dem Compiler MinGW 4.9.2 (der Standard). Mein Code ist der folgende:
In mainwindow.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
initBuildings();
initPage();
for (int i(0); i<buildings.size(); ++i) {
connect(static_cast<QAbstractButton*>(widgetlist.at(i).at(2)), &QAbstractButton::clicked, [this, i]() {
buildings.at(i).buy(amountMultiplier);});
}
}
void MainWindow::initBuildings()
{
Building b1 = Building("Building 1",100,1,200);
Building b2 = Building("Building 2",1000,10,2000);
buildings.append(b1);
buildings.append(b2);
}
void MainWindow::initPage()
{
for (int i(0); i<buildings.size(); i++) {
QList<QWidget *> buttons;
QLabel *namelabel = new QLabel(buildings.at(i).getName());
QLabel *amountlabel = new QLabel;
QPushButton *buybutton = new QPushButton(this);
QPushButton *upgradebutton = new QPushButton(this);
amountlabel->setFixedSize(50,40);
buybutton->setFixedSize(100,40);
upgradebutton->setFixedSize(100,40);
buttons.append(namelabel);
buttons.append(amountlabel);
buttons.append(buybutton);
buttons.append(upgradebutton);
widgetlist.append(buttons);
}
}
In mainwindow.h:
#include <QMainWindow>
#include <QScrollArea>
#include <QList>
#include <building.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void initBuildings();
void initPage();
Ui::MainWindow *ui;
int amountMultiplier;
QList<Building> buildings;
QList<QList<QWidget*>> widgetlist;
};
und "Gebäude" ist eine Klasse, die ich geschaffen habe, die nicht von einem anderen nicht erben Klasse. Die Funktion, die ich verwenden möchte, ist eine öffentliche funtion dieser Klasse:
void buy(int amount) const;
Es lässt sich nicht kompilieren und ich mehrere Fehler:
no matching function for call to 'MainWindow::connect(QAbstractButton*, void (QAbstractButton::*)(bool), MainWindow::MainWindow(QWidget*)::<lambda()>)
invalid use of incomplete type 'struct QtPrivate::QEnableIf< false, QMetaObject::Connection>
cannot convert '<lambda closure object>MainWindow::MainWindow(QWidget*)::< lambda()>{((MainWindow*)this), i}' (type 'MainWindow::MainWindow(QWidget*)::< lambda()>') to type 'const QObject*
Ich habe versucht, die Lambda Capture-Liste zu ändern, oder die wa zu ändern y Ich bekomme den Wert in den Listen, aber es ändert nichts und ich sehe nicht, was das Problem ist. Vielleicht liege ich falsch in der Verwendung des Lambda?
Welcher Typ ist meine Liste? – CppChris
Bitte zeigen Sie uns die Deklaration der 'MainWindow :: connect' Funktion – PcAF
@PcAF Es ist' QObject :: connect': http://doc.qt.io/qt-5/qobject.html # connect-4 –