在 Qt 中动态更改小部件的方法

change methods to widgets dynamically in Qt

我是 Qt 的新手,我尝试迭代 10 个控件和 show/hide 它们。

switch (id)
{
 case 1:
    ui->lblSinglePulse1->hide();
    ui->pbSinglePulse1->hide();
    break;
case 2:
    ui->lblSinglePulse2->hide();
    ui->pbSinglePulse2->hide();
    break;
case 3:
    ui->lblSinglePulse3->hide();
    ui->pbSinglePulse3->hide();
    break;
case 4:
... and so on

我确信还有另一种动态传递小部件名称的方法。 例如: ui->getWidgetByName("lblSinglePulse" + "2" )->隐藏(); 或其他...

请你帮忙。

来自 @Mat 评论

您需要先将所有控件添加到列表中,像这样

lblSinglePulseList.append(ui->lblSinglePulse1);
lblSinglePulseList.append(ui->lblSinglePulse2);
lblSinglePulseList.append(ui->lblSinglePulse3);
...
pblSinglePulseList.append(ui->pblSinglePulse1);
pblSinglePulseList.append(ui->pblSinglePulse2);
pblSinglePulseList.append(ui->pblSinglePulse3);

然后在你的函数中使用列表

lblSinglePulseList[id - 1]->hide();
pblSinglePulseList[id - 1]->hide();

已编辑:

如果 ui->lblSinglePulse1 的类型是 Lable 并且 ui->pbSinglePulse1 的类型是 PushButton,则列表初始化为:

QList<Lable *> lblSinglePulseList;
QList<PushButton *> pblSinglePulseList;

我想你可以用这样的地图来做:

头文件。

class YourClass
{
public:
    // ...

private:
    void setHidden( const int aIndex, const bool aHidden );
    void setAllVisible();

private:
    QMap< int, QList< QWidget* > > m_Widgets; // This shall be a member of your class.
};

源文件。

YourClass::YourClass()
{
    m_Widgets[ 0 ] << ui->lblSinglePulse1;
    m_Widgets[ 0 ] << ui->pblSinglePulse1;
    m_Widgets[ 1 ] << ui->lblSinglePulse2;
    m_Widgets[ 1 ] << ui->pblSinglePulse3;
    // And so ...
}

// To hide widgets at a given index.
void YourClass::setHidden( const int aIndex, const bool aHidden)
{
    // First you need to set all items visible otherwise the result won't be the desired ... I think.
    setAllVisible();

    for ( auto item : m_Widgets[ aIndex ] )
    {
        item->setHidden( aHidden );
    }
}

void YourClass::setAllVisible()
{
    for ( auto items : m_Widgets )
    {
        for ( auto item : items )
        {
            item->setVisible( true );
        }
    }
}