我是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(); 或者别的......
请你的帮助。
答案 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 );
}
}
}