Я пытаюсь создать приложение Qt Widget в учебных целях. У меня есть класс под названием GBoard, реализованный следующим образом:
GBoard.h
class GBoard :public QWidget{
public:
GBoard(QWidget* parent);
private:
QVector<QPushButton*> butts;
private slots:
void handleclick(int x);
};
GBoard. cpp
GBoard::GBoard(QWidget * parent) :QWidget{ parent} {
QGridLayout* grid = new QGridLayout(this);
QSignalMapper* mapper = new QSignalMapper(this);
for (int row = 0; row < 3; row++) {
for (int column = 0; column < 3; column++) {
QPushButton* button = new QPushButton(" ");
butts.push_back(button);
mapper->setMapping(button, butts.size() - 1);;//connects the current button to its index int in butts
grid->addWidget(button, row, column);
connect(button, SIGNAL(clicked), mapper , SLOT(map));//From what I understand, map() would emit a signal mapped() that would have the current button's index in butts associated with it
}
}
connect(mapper, SIGNAL(mapped), this, SLOT(handleclick));
}
void GBoard::handleclick(int x) {
QPushButton* button = butts[x];
button->setText(QString("Clicked"));
}
Однако, когда он построен и запущен , кнопки отображаются так, как должны, но при их нажатии ничего не происходит. Как можно передать аргумент int в SLOT (handleclick)?
Кроме того, можно ли использовать лямбда-выражение вместо функции-члена?