Qt中来自不同功能的按钮引用

Button reference in Qt from different function

本文关键字:功能 按钮 引用 Qt      更新时间:2023-10-16

目前,我正在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]Color,框是[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());
}

这会导致错误:

"Ui::SettingsMenu中没有tempColor成员">

我知道这是因为"ui->[someName]"调用不仅接受字符串,还接受对对象的引用。

但是,即使我将PushButton对象作为指向SetColorOfButton函数的指针传递,我也无法设置实际按钮的颜色,因为我当前正在查看指向该按钮的指针。

那么,我将如何从函数中引用一系列我在运行时不知道其名称的按钮呢?

找到了。 生成的函数将显示上述所需功能。

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());
}

感谢德雷舍姆的帮助。 我并不像我想象的那样了解findchild((的功能。