当前,我正在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] Hex。
由于我要挂接这些按钮中的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
函数的指针,我也无法设置 actual 按钮的颜色,因为我当前是看着那个按钮的指针。
那么我将如何引用一系列按钮,这些按钮在运行时从功能中不知道?
答案 0 :(得分:0)
找到了。生成的功能将显示上面概述的所需功能。
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()的功能。