Динамическое создание кнопок и изменение их цвета по нажатию
у меня создаются динамически кнопки (добавляется по одной по нажатию на другую кнопку "Добавить"). Далее по нажатию на эти кнопки мне нужно менять цвет каждой, сейчас у меня получается менять цвет только последней созданной кнопки (как я понимаю, дело в том, что slot вызывается к последнему указателю), как мне это исправить, подскажите пожалуйста?
Заголовочный файл .h
private:
QPushButton *buttonForColor;
private slots:
void addNewRowToTable();
void setColor();
Кнопка "Добавить" для создания кнопок
QPushButton *addRowInTable = new QPushButton("Добавить", this);
connect(addRowInTable, SIGNAL(clicked()), this, SLOT(addNewRowToTable()));
Далее, по нажатию, срабатывает функция добавления
void SParametrs::addNewRowToTable()
{
buttonForColor = new QPushButton;
connect(buttonForColor, SIGNAL(clicked()), this, SLOT(setColor()));
}
И теперь, по нажатию на созданные кнопки, срабатывает функция установки цвета конкретной кнопки
void SParametrs::setColor() {
QColor color = QColorDialog::getColor(Qt::green, this);
QPalette palette = buttonForColor->palette();
palette.setColor(QPalette::Button,color);
buttonForColor->setStyleSheet("background-color:" + color.name());
}
Как мне поправить, чтобы я мог ставить цвет на любую кнопку из созданных, а не только на последнюю?
Ответы (1 шт):
Ваше предположение неверно. Слот срабатывает для каждой из кнопок. Проблема в самом слоте. Вы изменяете там объект buttonForColor, указатель которого изменяется при создании новой кнопки (поэтому и указывает на последнюю кнопку). Чтобы манипулировать объектом-инициатором сигнала в слоте, привязанном к нескольким объектам, вам надо получать указатель на объект-отправитель:
void SParametrs::setColor() {
QColor color = QColorDialog::getColor(Qt::green, this);
QPalette palette = buttonForColor->palette();
palette.setColor(QPalette::Button,color);
QPushButton* button = (QPushButton*)sender(); //!!
button->setStyleSheet("background-color:" + color.name());
}