• 5523阅读
  • 9回复

[提问]connect可以以QString为参数么 [复制链接]

上一主题 下一主题
离线yinrenjieone
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-13
bool QObject::connect ( const QObject * sender, const char * signal, const char * member ) const
现有QPushButton共N个,对象名为pushButton_001,pushButton_002,pushButton_003……pushButton_N
我想把他们都连到同一个槽上,要写N遍connect么……有没有快速方法?
connect(pushButton_001, SINGAL(clicked()), this, SLOT(mySlot()));
connect(pushButton_002, SINGAL(clicked()), this, SLOT(mySlot()));
connect(pushButton_003, SINGAL(clicked()), this, SLOT(mySlot()));
……
connect(pushButton_N, SINGAL(clicked()), this, SLOT(mySlot()));
这样真的很痛苦吖……
离线roywillow

只看该作者 1楼 发表于: 2011-11-13
感觉好像不太可能……
把它们构造成一个数组然后用for循环吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 2楼 发表于: 2011-11-13
回 楼主(yinrenjieone) 的帖子
不管怎么写代码,本质是确实要一个一个的connect
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 3楼 发表于: 2011-11-13
你是用设计师生成的按钮?
之前我遇到这个情况的时候,是在代码中再生成一个指针列表,手动用代码一个一个赋值,然后用循环connect

突然想起一个方法
你肯定能获得这些按钮的parent的children列表的,然后检查这个列表中的所有QObject的objectName,如果符合你那些按钮的命名规则,就connect。因为ui生成的h文件中会强制给每个object设置name,所以可以这么办,但是我们一般手动写代码不会注意的,objectName估计是空。
再者就是去匹配类名,不过这个针对性可能就差一些了
这样代码会简洁一些,但是效率就不好了

专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 4楼 发表于: 2011-11-13
回 楼主(yinrenjieone) 的帖子
如果是手写代码,
从QObject派生一个类,添加一个信号一个槽(槽内就一行emit信号),
再从QPushButton派生一个类,构造函数的参数增加一个  QObject派生类*  类型的变量,
在QPushButton派生类的构造函数里connect(QPushButton的clicked()到QObject派生类里自己写的槽,
最后在window里写一个槽,和QObject派生类里的信号connect。
Ok

发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 5楼 发表于: 2011-11-13
回 4楼(jdwx) 的帖子
那样的话或许可以使用一个static成员?
不过如果需要在槽中区分各个button的话那样做就不行了吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 6楼 发表于: 2011-11-14
回 5楼(roywillow) 的帖子
上一个方案太复杂,再修改一下:
只要在window里写一个用于响应PushButton的clicked信号的槽,
从QPushButton派生一个类,在构造函数里connect   QPushButton的clicked和window里的槽就好了,反正new 那个button也要this参数





发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线zhy282289
只看该作者 7楼 发表于: 2011-11-14
自己写个函数
QPushButton *createPushButton(QString buttonName, QWidget *parent)
{
    QPushButton *btn = new QPushButton(buttonName ,parent);
    connect(.....);
    returen btn;
}
如果你是拖出来的button就老老实实一个个connect吧
为什么我脸这么胖~
离线roywillow

只看该作者 8楼 发表于: 2011-11-14
回 6楼(jdwx) 的帖子
原来如此
是让button主动去找parent的槽并且连接是么

To 7F:
我感觉LZ应该是用设计师拖出来的按钮,如果是写代码还不用数组,那在new这些button的时候就能顺便connect了

不过感觉就算展开了一个一个写也不是什么麻烦事,我经常用excel配合notepad来生成这种东西,写代码的“效率”还挺高……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线yinrenjieone

只看该作者 9楼 发表于: 2011-11-14
感谢各位给予的建议。
我的确是用设计师拖出来的……然后连的时候才发现很麻烦……

我现在用数组来处理的,多谢各位:-)
快速回复
限100 字节
 
上一个 下一个