Qt中来自不同功能的按钮参考

时间:2018-10-23 21:58:56

标签: c++ qt

当前,我正在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 按钮的颜色,因为我当前是看着那个按钮的指针。

那么我将如何引用一系列按钮,这些按钮在运行时从功能中不知道?

1 个答案:

答案 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()的功能。