是否可以访问名称为

时间:2015-07-26 20:42:38

标签: c++ qt

我有QWidget我已附加到QMainWindow的工具栏。我想在激活按钮时更改按钮文本的颜色。我意识到我可以为每个按钮创建一个方法(下面的示例),但我想知道是否可以创建一个使用所需按钮名称的方法(下面的伪代码)。

更改特定按钮:

void ToolBarClass::changeOKbutton(QColor color)
{
    ui->pushbutton_ok->[however text color is changed](color);
}

更改变量按钮

void ToolBarClass::changePushButton(QString buttonName, QColor color)
{
    ui->[accessUImemberByName](buttonName)->[however text color is changed](color);
}

这不是this question的重复,因为我正在寻找通过名称访问ui成员的Qt特定功能,这似乎与"重复"非常不同。问题

1 个答案:

答案 0 :(得分:3)

您可以使用QObject::objectName()功能,如下所示

    void ToolBarClass::changePushButton(QString buttonName, QColor color)
    {
        QList< QPushButton* > listBtnAll = findChildren< QPushButton* >();
        for ( int i = 0; i < listBtnAll.size(); i++ )
        {
            if ( listBtnAll[ i ]->objectName() == buttonName )
            {
                listBtnAll[ i ]->[however text color is changed](color);
                break;
            }
        }
    }

正如@ Pie_Jesu的建议,我改变了代码,如下所示,

    void ToolBarClass::changePushButton(QString buttonName, QColor color)
    {
        QPushButton *pButton = findChild<QPushButton *>( buttonName ); 
        if ( pButton )
        {
            pButton->[however text color is changed](color);
        }
    }

我认为搜索时间的成本是相同的,但是,打字的成本比旧代码更有效。