在Qt中动态地将方法更改为小部件

时间:2015-05-25 06:26:45

标签: c++ qt

我是Qt的新手,我尝试迭代10个控件并显示/隐藏它们。

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") - > hide(); 或者别的......

请你的帮助。

2 个答案:

答案 0 :(得分:0)

@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);

然后在函数中使用list

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

编辑:

如果ui-> lblSinglePulse1的类型为 Lable 且ui-> pbSinglePulse1的类型为 PushButton ,则列表init为:

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

答案 1 :(得分:0)

我认为你可以用这样的地图来做到这一点:

头文件。

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 );
        }
    }
}