找回密码
 立即注册
收起左侧

QT槽函数

8
回复
12277
查看
[复制链接]

尚未签到

来源: 2013-6-25 16:54:54 显示全部楼层 |阅读模式
1Qter豆
编写了个QWidget其中包含10个QPushButton,一个QLabel,现在想实现按下按键1,QLabel就显示1,按下按键9,QLabel就显示9,在只用一个槽函数的情况下,怎么实现啊?就是QLabel怎么能区分是哪个按键按下的?我开始想法是利用按键的clicked()信号来触发另一个信号(自己编写的SIGNAL)clicked1(int),之后clicked1(int)connect到QLabel的显示槽函数
labelshow(int m){ label->settext(tr(“%1”).arg(m));}但是貌似槽函数不会运行?想知道这个思路可以么,怎么才能将参数传递到槽函数里面!

最佳答案

查看完整内容

如果只是解决你说的问题,那挺容易实现的,就是放10个按钮,分别写上0-9,然后分别设置每一个按钮的clicked()槽,在里面让QLabel显示自己的数字即可。 但是如果这个问题进一步来说,比如想实现软键盘,那么上面的方法就不行了,这个可以使用QSignalMapper来实现。在Qt帮助里面查看Input Panel Example关键字,这个例子可以实现这个功能。 ...
回复

使用道具 举报

累计签到:1573 天
连续签到:1 天
2013-6-25 16:54:55 显示全部楼层
如果只是解决你说的问题,那挺容易实现的,就是放10个按钮,分别写上0-9,然后分别设置每一个按钮的clicked()槽,在里面让QLabel显示自己的数字即可。

但是如果这个问题进一步来说,比如想实现软键盘,那么上面的方法就不行了,这个可以使用QSignalMapper来实现。在Qt帮助里面查看Input Panel Example关键字,这个例子可以实现这个功能。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-6-25 18:22:13 显示全部楼层
你的想法是可以,不过更好的方式是使用一个按钮组。给你贴一段代码,自己修改下。
QButtonGroup *btnGroup = new QButtonGroup(this);//按钮组
    btnGroup->addButton(ui->btnNum0,0);
    btnGroup->addButton(ui->btnNum1,1);
    btnGroup->addButton(ui->btnNum2,2);
    btnGroup->addButton(ui->btnNum3,3);
    btnGroup->addButton(ui->btnNum4,4);
    btnGroup->addButton(ui->btnNum5,5);
    btnGroup->addButton(ui->btnNum6,6);
    btnGroup->addButton(ui->btnNum7,7);
    btnGroup->addButton(ui->btnNum8,8);
    btnGroup->addButton(ui->btnNum9,9);
    connect(btnGroup, SIGNAL(buttonClicked(int)),this, SLOT(slot_set_label(int)));

void 类名::slot_set_label(int btnNum)
{
   ui->label->setText(QString::number(btnNum));
}
回复

使用道具 举报

尚未签到

2013-6-25 18:54:37 显示全部楼层
飞扬的灵感 发表于 2013-6-25 18:22
你的想法是可以,不过更好的方式是使用一个按钮组。给你贴一段代码,自己修改下。
QButtonGroup *btnGroup  ...

我的主要是在一个项目里面,那个大的项目里面的一个小的地方的思路就是把 一个QPushbutton前面还有QLabel(这个label装序号),QPushbutton的后面还有一个设置的按钮和一个QLabel(装备注信息),这2个QPushbutton和2个QLAbel我是封装在一个QHBoxlayout里面的(相当于一个小组——可能还要扩展别的,当点击add按钮我就会在主界面加这么一个小组),我现在就是点击第一个QPushbutton能在我的一个独立的Qlabel上显示这是第几个小组的(其实就是分辨出这是哪个QHBoxlayout)。像你这么设计的话,那个qbuttongroup里面能装QLabel或者别的东西么?
回复

使用道具 举报

尚未签到

2013-6-25 19:02:16 显示全部楼层
飞扬的灵感 发表于 2013-6-25 18:22
你的想法是可以,不过更好的方式是使用一个按钮组。给你贴一段代码,自己修改下。
QButtonGroup *btnGroup  ...

最好能装一个QHBoxLayout,或者说我的2个QPushbutton以及2个QLabel能装在别的什么东西(或者容器)里面?只要效果是一个水平排列,而且在一个主窗口中多个这种水平排列的容器里面只要一个按键按下,能识别是在在哪一个容器的哪一个按钮。
回复

使用道具 举报

尚未签到

2013-6-25 19:09:44 显示全部楼层
yafeilinux 发表于 2013-6-25 18:49
如果只是解决你说的问题,那挺容易实现的,就是放10个按钮,分别写上0-9,然后分别设置每一个按钮的clicked ...

OK,我先看看能不能改写到实现我下面说的那个功能先~
回复

使用道具 举报

尚未签到

2013-6-25 21:33:52 显示全部楼层
yafeilinux 发表于 2013-6-25 18:49
如果只是解决你说的问题,那挺容易实现的,就是放10个按钮,分别写上0-9,然后分别设置每一个按钮的clicked ...

我看了,感觉这个只能实现一半我要的的功能,但是我想这样反着找,比如就按那个例子Input Panel Example,我现在在age里面用电脑自带的键盘输入了12,之后我要去双击弹出来那个虚拟键盘上面要能把我输入的1,2对应的键盘给false掉(就是能再被按下);这样从外界反着找到你这个按键组里面的具体的哪个按键,这怎么实现呢?
回复

使用道具 举报

尚未签到

2013-6-25 21:38:24 显示全部楼层
appy 发表于 2013-6-25 21:33
我看了,感觉这个只能实现一半我要的的功能,但是我想这样反着找,比如就按那个例子Input Panel Example ...

少打了个字是不能被按下
回复

使用道具 举报

累计签到:1573 天
连续签到:1 天
2013-6-25 22:22:56 显示全部楼层
appy 发表于 2013-6-25 21:38
少打了个字是不能被按下

看你的实现了,因为这里只有10个按钮,直接根据按钮的text来判断吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了