c++ - 是否可以通过名称访问变量 UI 成员?

标签 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 的重复项因为我正在寻找 Qt 特定功能来按名称访问 ui 成员,这似乎与“重复”问题非常不同。

最佳答案

您可以使用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);
        }
    }

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

关于c++ - 是否可以通过名称访问变量 UI 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31641734/

相关文章:

c++ - 保存多种数据类型的数据结构 C++

c++ - 在 const char* 上分配了两次

c++ - 为什么即使是私有(private)链接也会继承包含路径

c++ - 带指针的 Getter 和 Setter

c++ - 如何收听来自 QML 的 C++ 信号?

Qt 创建者 "Cannot create file (...) qtcreator.xml"(Mac)

c++ - QML 新手在将 C++ 后端与 QML 前端连接起来时需要一些帮助

c++ - c++0x中wchar_t的命运如何?

qt - 如何在 QWebView/QWebPage 中实现 "back" Action

c++ - QPixmap 的 loadFromData 函数使用了一些奇怪的缓存机制?