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

change methods to widgets dynamically in Qt

本文关键字:小部 方法 改变 Qt 动态      更新时间:2023-10-16

我是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-> gettwidgetbyname ("lblSinglePulse" + "2")->hide();或者其他的…

, @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的type为 label ,且ui->pbSinglePulse1的type为PushButton,则list init为

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