• 5661阅读
  • 1回复

怎么利用btn实现layout的切换 [复制链接]

上一主题 下一主题
离线saial
 
只看楼主 倒序阅读 楼主  发表于: 2010-07-22
写了 两个 layout,不要求同时显示,要求layout1先显示,然后可以用btn1不停的切换layout1和layout2。
总是实现不了。
我的写法大概是:
int i=1;
 layout1 = new QVBoxLayout;
layout2 = new ....;
btn1 = new QPushButton;
connect(btn1,SIGNAL(clicked()),this,SLOT(slotchang()));

if (i==1)
setLayout(layout1)
else
setLayout(layout2)

....
slotchang函数是:
?::slotchang()
{
i+1;
i=i%2;
}
以为 会判断i的值然后 setLayout 发现 界面一直是layout1 却改变不成layout2。
%-------------------------------------------------------------------------%
于是我换了写法。
int i=1;
 layout1 = new QVBoxLayout;
layout2 = new ....;
btn1 = new QPushButton;
connect(btn1,SIGNAL(clicked()),this,SLOT(slotchang()));

把slotchang变成全局的然后:
?::slotchang()
{
i+1;
i=i%2;

if (i==1)
setLayout(layout1)
else
setLayout(layout2)


}
这样就什么都不显示了。
%-----------------------------------------------------------%
求教了

离线l_xin
只看该作者 1楼 发表于: 2010-07-22
程序逻辑的问题
第一次写的程序,你的程序运行时会直接运行到
if (i==1)
setLayout(layout1)
else
setLayout(layout2)

此时你的i==1所以只有显示layout1,你再click改变的只是i的值,setLayout的判断不会再进行。

第二次写的程序里没有默认layout,当然什么都没有了,连你的button都没了。

第二次的程序试试改下
int i=1;
layout1 = new QVBoxLayout;
layout2 = new ....;
btn1 = new QPushButton;
connect(btn1,SIGNAL(clicked()),this,SLOT(slotchang()));
layout.addwidget(btn1);
this.setLayout(layout1);


?::slotchang()
{
i+1;
i=i%2;

if (i==1)
layout1.addwidget(btn1);
setLayout(layout1)
else
layout2.addwidget(btn1);
setLayout(layout2)


}
快速回复
限100 字节
 
上一个 下一个