PDA

View Full Version : How to show and hide Button when i created.



vudvpro
14th March 2011, 10:11
- Create Layout:


void Schedule::createLayout()
{
QVBoxLayout *mainLayout = new QVBoxLayout();
QGridLayout *daysLayout = new QGridLayout();
QWidget *viewport = new QWidget();
mainLayout->addWidget(viewport);

Token *label = new Token(this);
label->setAlignment(Qt::AlignLeft);
QList<Token *> cwList;
cwList.append(label);
daysLayout->addWidget(label);


for (int i = 0; i < 5; i++ )
{
Button *label = new Button(this);
label->setAlignment(Qt::AlignLeft);
label->setOptimumSize(299, 15);
label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
SchedulesList.append(label);
daysLayout->addWidget(label);
}

daysLayout->setSpacing(1);
daysLayout->setContentsMargins(0,0,0,0);
daysLayout->setAlignment(Qt::AlignCenter);
viewport->setLayout(daysLayout);

mainLayout->setSpacing(0);
mainLayout->setContentsMargins(0,0,0,0);
mainLayout->setAlignment(Qt::AlignCenter);
setLayout(mainLayout);
}

- i want update layout can show and hide button.
i use:

QLayoutItem *Item = NULL;
for (int i = 0; i < 5; i++)
{
Item = daysLayout->itemAt(i);
if (Item)
{
Item->widget()->hide();
Item->widget()->adjustSize();
Item->widget()->updateGeometry();
}
}
daysLayout->update();

But i can't show them again.
How to do this??
Many thank!!!

high_flyer
14th March 2011, 10:31
But i can't show them again.
Where is the code for showing the buttons again?
You didn't post it.

vudvpro
15th March 2011, 04:37
This code Show:


std::vector<CScheduleItem*>::iterator it;
QLayoutItem *Item = NULL;
int i = 0;
for (it = g_Gadget->GetPIMLookData()->m_vecShedules.begin(); it != g_Gadget->GetPIMLookData()->m_vecShedules.end(); it++)
{
Item = daysLayout->itemAt(i);
Item->widget()->show();
}

high_flyer
15th March 2011, 10:56
Where is this code?
If you put a break point in the for loop, does it get caught?

vudvpro
25th March 2011, 09:51
Many thanks, My application worked.
- The first Create:


Token *label = new Token(this);
label->setAlignment(Qt::AlignTop);
label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
cwList.append(label);
daysLayout->addWidget(label);

for (int i = 0; i < 5; i++)
{
Button *label = new Button(this);
label->setAlignment(Qt::AlignTop);
label->setOptimumSize(299, 15);
label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
SchedulesList.append(label);
daysLayout->addWidget(label);
}
for (int i = 1; i < daysLayout->count(); i++)
{
daysLayout->itemAt(i)->widget()->hide();
}

- After i show this:


int nCount = g_Gadget->GetPIMLookData()->m_vecShedules.size();
std::vector<CScheduleItem*>::iterator it;
int i = 0;
int j = 1;
//daysLayout->itemAt(0)->widget()->show();
for (i; i < 5; i++)
{
if (i < nCount)
{
if (!daysLayout->itemAt(i+1)->widget()->isVisible())
daysLayout->itemAt(i+1)->widget()->show();
j++;
}
if (j >= nCount+1 && i >= nCount)
{
if (daysLayout->itemAt(i+1)->widget()->isVisible())
daysLayout->itemAt(i+1)->widget()->hide();
}
if (nCount == 0)
{
if (!daysLayout->itemAt(1)->widget()->isVisible())
daysLayout->itemAt(1)->widget()->show();
}
}
updateGeometry();
if (g_Gadget->bRefresh == true)
animateTop();