Ссылка на кнопку в Qt из другой функции - PullRequest
0 голосов
/ 24 октября 2018

В настоящее время я работаю над проектом в 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, я не смогу установить цвет кнопки фактически , потому что в данный момент смотрю науказатель на эту кнопку.

Итак, как бы я сослался на серию кнопок, имена которых я не знаю во время выполнения из функции?

1 Ответ

0 голосов
/ 24 октября 2018

Нашел это.Полученная функция отобразит желаемую функциональность, описанную выше.

void SettingsMenu::SetColorOfButton(QString temp)
{
    QString tempColor = temp.append("Color");
    temp.chop(5);
    QString tempHex = temp.append("Hex");
    QPushButton *tempPushButton = findChild<QPushButton*>(tempColor);
    QTextEdit *tempTextEdit = findChild<QTextEdit*>(tempHex);

    QColor color = QColorDialog::getColor(Qt::yelow, this);
    if(color.isValid())
    {
        QString qss = QString("background-color: %1").arg(color.name());
        tempPushButton->setStyleSheet(qss);
    }
    tempTextEdit->setText(color.name());
}

Спасибо drescherjm за помощь.Я не понимал функциональность findchild () так же хорошо, как думал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...