В настоящее время я работаю над проектом в Qt, в котором есть несколько кнопок и текстовых полей с общими функциями.
Например:
void SettingsMenu::on_normalTextColor_clicked()
{
QColor color = QColorDialog::getColor(Qt::yellow, this);
if(color.isValid())
{
QString qss = QString("background-color: %1").arg(color.name());
ui->normalTextColor-setStyleSheet(qss);
}
ui->normalTextHex->setText(color.name());
}
В данном случае normalTextColor
соответствует кнопке, которая при нажатии создает цветовой диалог, затем устанавливает цвет этой кнопки в выбранный цвет и устанавливает текст в normalTextHex
в шестнадцатеричный код выбранного цвета (если этот цвет допустим).Другие мои кнопки и поля имеют одинаковую структуру имен, причем кнопки имеют цвет [someLabel], а поля - шестнадцатеричный [someLabel].
Поскольку у меня более 20 из этих кнопок для подключения, я подумал:сделать одну функцию, на которую я мог бы ссылаться, вместо того, чтобы писать весь код каждый раз.Я подумал, что, передав имя кнопки в виде строки и затем добавив к ней, я мог бы сослаться на это в всеобъемлющей функции.
Например:
void SettingsMenu::SetColorOfButton(QString temp)
{
QString tempColor = temp.Append("Color");
QString tempHex = temp.Append("Hex");
QColor color = QColorDialog::getColor(Qt::yellow, this);
if(color.isValid())
{
QString qss = QString("background-color: %1").arg(color.name());
ui->tempColor->setStyleSheet(qss);
}
ui->tempHex->setText(color.name());
}
Это приводит к ошибке:
'нет члена с именем tempColor
в Ui::SettingsMenu
'
Я понимаю, что это потому, что вызов 'ui -> [someName]' не просто принимаетстрока, но ссылка на объект.
Однако, даже если я передам объект PushButton
в качестве указателя на функцию SetColorOfButton
, я не смогу установить цвет кнопки фактически , потому что в данный момент смотрю науказатель на эту кнопку.
Итак, как бы я сослался на серию кнопок, имена которых я не знаю во время выполнения из функции?