Отображение сигналов Qt: редактирование объекта эмиттера

Поэтому я динамически создаю объекты QPushButton, а затем сопоставляю их для генерации сигнала.
Из слота, связанного с сигналом, я хочу отредактировать свойства объекта (в данном случае текст, то есть QPushButton :: text ()).

В классе «диалог» в заголовочном файле у меня есть:

private:
QSignalMapper *signalMapper;

private slots:
void buttonGeneric(QPushButton &button);

signals:
void clicked(QPushButton &button);

В конструкторе класса «dialog» в файле .cpp у меня есть:

signalMapper = new QSignalMapper(this);

for (int i = 0; i < 100; ++i)
{
QPushButton *button = new QPushButton(QString::number(i + 1));
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, button);
ui->gridLayout->addWidget(button, 2 + (i / 10), (i % 10));
}
connect(signalMapper, SIGNAL(mapped(QPushButton &button)), this, SIGNAL(clicked(QPushButton &button)));
connect(this, SIGNAL(clicked(QPushButton &button)), this, SLOT(buttonGeneric(QPushButton &button)));

И, наконец, за пределами конструктора в том же файле .cpp, который у меня есть:

void dialog::buttonGeneric(QPushButton & button)
{
button.setText("hello");
}

Этот код компилируется и запускается, но когда я нажимаю кнопки, ничего не происходит. В выходных данных отладки приложения я получаю следующее:

QObject::connect: No such signal QSignalMapper::mapped(QPushButton &button)
QObject::connect:  (receiver name: 'dialog')
QObject::connect: No such signal dialog::clicked(QPushButton &button)
QObject::connect:  (sender name:   'dialog')
QObject::connect:  (receiver name: 'dialog')

Итак, еще раз, я пытаюсь изменить текст нажатой кнопки на что-то новое.
Как я могу это сделать?

Заранее спасибо.

1

Решение

QSignalMapper не имеет сигнала mapped(QPushButton&), Это имеет mapped(QWidget*)Однако, это тот, который испускается для вашей кнопки. Таким образом, вы должны подключиться к этому сигналу (и изменить свой сигнал диалога & слот соответственно).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]