• 7336阅读
  • 9回复

[提问]qt QpushButton 能复写信号么? [复制链接]

上一主题 下一主题
离线hellokitt
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-23
场景:
mainwindow  上有5个pushbutton 5个 Qlabel
当点击1个pushbutton,发送clicked 信号给mainwindow ,并传递1个Qlabel对象。
类似connect(pushbutton, SIGNAL(clicked(Qlabel *)),mainwindow,SLOT(deal(Qlabel *)));
但 pushbutton 的clicked 信号不能有参数


我是怎样处理的
1,继承Qpushbutton,复写clicked信号 并加参数  
signals:
void clicked(Qlabel *);
但没成功。


注意,我要mainwindow 接受信号。 不要pushbutton 接受 ,虽然mainwindow 能获取到qlabel 对象,不用通过参数。
我只是描述一个场景,实际情况可能和我描述的不一样,想要的是,怎样实现复写信号,或者,使原来的clicked 实现参数传递。
离线roywillow

只看该作者 1楼 发表于: 2011-12-23
单从信号的声明上来看是没啥问题
关键是你这个信号在什么时候发出了
我感觉你大概还需要一个槽,连接到原来的clicked()信号中,然后在这个槽中emit这个新的clicked(QLabel*)
至于哪个button对应哪个label这个应该就是你自己去处理了吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线hellokitt
只看该作者 2楼 发表于: 2011-12-23
引用第1楼roywillow于2011-12-23 16:29发表的  :
单从信号的声明上来看是没啥问题
关键是你这个信号在什么时候发出了
我感觉你大概还需要一个槽,连接到原来的clicked()信号中,然后在这个槽中emit这个新的clicked(QLabel*)
至于哪个button对应哪个label这个应该就是你自己去处理了吧

1,点击的时候发出。
2,我说的是点击的时候传递参数。


    我知道你说的那种意思。 连接原来的clicked(),但不对。
      
假如QPushbutton 的 信号和槽
旧的clicked()-> 槽()
                       {        
                              -> emit这个新的clicked(QLabel*)    ;;;;;;;;;;;;;;;;;;;;关键是QLabel 怎么传过来。     如果这样的话,必须new QpushButton->setLable(Qlabel), 在this->Qlabel ,,我不要这样的。 我要直接clicked发送参数。
                       }



离线hellokitt
只看该作者 3楼 发表于: 2011-12-23
或者,这样说把,我有5个pushButton ,  发送clicked信号给mainWindow ,,,,,,, mainWindow 槽,处理。

处理的时候,得知道。这5个pushButton 是哪一个啊。 pushButton->text();      问题是clicked不能传递参数,  MFC 可以传递。。。我就是不知道qt怎么处理这种情况。
离线淳于半邪

只看该作者 4楼 发表于: 2011-12-23
你要实现的是点击按钮,删除label?
如果是,不需要带什么参数
离线hellokitt
只看该作者 5楼 发表于: 2011-12-23
引用第4楼淳于半邪于2011-12-23 17:14发表的  :
你要实现的是点击按钮,删除label?
如果是,不需要带什么参数

  我只是描述了一种场景,重点是,传参数和复写。 什么删除不删除的。
离线dbzhang800

只看该作者 6楼 发表于: 2011-12-23
引用第5楼hellokitt于2011-12-23 17:17发表的  :
  我只是描述了一种场景,重点是,传参数和复写。 什么删除不删除的。

打开manual,看

QSignalMapper 或者  QObject::sender()
离线roywillow

只看该作者 7楼 发表于: 2011-12-23
既然都继承了QPushButton,那让他记录一下是哪个QLabel也不是啥问题了
比如再写个setBuddy(QLabel*)成员函数啥的,这样这个button不就知道他对应的label是哪个了吗
反正也就是创建button的时候多一句代码的问题

再不然如果条件允许,直接继承一个QWidget,里面包括一个label和一个button,做成一个整体……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线hellokitt
只看该作者 8楼 发表于: 2011-12-23
引用第6楼dbzhang800于2011-12-23 17:32发表的  :
打开manual,看
QSignalMapper 或者  QObject::sender()


靠谱!
离线roywillow

只看该作者 9楼 发表于: 2011-12-23
回 6楼(dbzhang800) 的帖子
原来如此
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个