关于通过一个按键显示和隐藏一个pushButton的程序问题求教。

maoweinjust 2012-06-29 05:03:18
各位大神们,我想编一个界面,其中需要用一个按键来控制一个PushButton的显示和影藏(按一下这个按键PushButton就显示,再按一下就隐藏,如此循环),我的程序是这也的,最初PushButton默认是隐藏的:
void Widget::keyPressEvent(QKeyEvent *k)
{
bool state=false;
if(!k->key()==Qt::Key_F && state==false)
{
ui->pushButton->hide();//隐藏的情况下,没按就保持隐藏
}
else if(k->key()==Qt::Key_F && state==false)
{
ui->pushButton->show();//隐藏的情况下,按一下就显示
state==true;
}
else if(k->key()==Qt::Key_F && state==true)
{
ui->pushButton->hide();//显示的情况下,再按一下就隐藏
state==false;
}
else //显示的情况下,不按就保持显示
{
ui->pushButton->show();
state==true;
}
}
但是最后运行的结果是第一次按F键的时候,pushButton可以显示,但是之后再怎么按F它都保持显示,不隐藏,请大神们帮忙看看原因吧,谢谢啦!
...全文
342 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是学友 2012-06-29
  • 打赏
  • 举报
回复
擦,来晚了吗?我回复的时候还0回复呢,一转眼结贴了????
我是学友 2012-06-29
  • 打赏
  • 举报
回复
一段优秀的代码,是用最少的代码完成同样的目标
这段代码楼主你自己看着不晕吗?
我勉强给你看了下
else if(k->key()==Qt::Key_F && state==false)
{
ui->pushButton->show();//隐藏的情况下,按一下就显示
state==true;
}

不管你按多少次,永远都只是执行这么一段,原因就出在bool state=false;你写在了这个函数里,不管什么时候进来,state都是false,不会是true
还有,keyPressEvent本来就是按键按下的时候才触发的,你设定的不按下就怎么样怎么样根本没用

void Widget::keyPressEvent(QKeyEvent *k)
{
if(k->key()==Qt::Key_F && state==false)
{
ui->pushButton->show();
state==true;
}
else if(k->key()==Qt::Key_F && state==true)
{
ui->pushButton->hide();
state==false;
}
}

把bool state=false;写在构造函数里,换成全局变量,按照上面那么写就对了
还有两个问题
不等于是这么写的...!=....,不是!....=....这么写的
另一个就是,你的button要是在界面上的话,最好不要用show这个函数,show的话是单独脱离界面显示的
button设置是否可以按要比这个好的多
xiebin133 2012-06-29
  • 打赏
  • 举报
回复
你的 state 是个局部变量, 每次进入你都赋值为false,当你按 F键的时候,永远只能进入
else if(k->key()==Qt::Key_F && state==false)
{
ui->pushButton->show();//隐藏的情况下,按一下就显示
state==true;
}
这里。你的想法应该是用state 做一个标志,应该写成全局的。还有,这样的问题,你应该先单步调试一下,尽量自己找出来。因为这并不难。
开发者说 2012-06-29
  • 打赏
  • 举报
回复
bool state=false;改为static bool state=false;

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧