Невозможно подключить сигнал QPushButton :: clicked к слоту - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать приложение 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)?

Кроме того, можно ли использовать лямбда-выражение вместо функции-члена?

...