umbcom

C++博客 首页 新随笔 联系 聚合 管理
  2 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks
@aladdina
恩,是的.
最近写的这个程序使用sender这种方法时在批量控件快速切换并且机器显示芯片不怎好的情况下总会出现问题.我还是用了之前自己写的信号。
还有 谢谢提醒这类型转换,主要是看原来代码c风格的强制转换用得比较多,自己也不自主的用了。这个有类型的安全检查还是比没有的强。
@Yao
那sender是QObject的 我之前并没有看到这个,:-)
@goodname
牛人啊,你说的方法果然可行,先膜拜一下,再嘴一个,哈哈。
我再把你的观点补充清晰一点,以免造成困惑。
将goodname这位仁兄的这种方法应用到以上程序里是这样的,
先将MyButton这个类就暂时先不需要了,将MyDialog类中的所有的MyButton替换成你想传递的部件,我这里用QPushButton.
将MyDialog的链接改为:
connect(btn,SIGNAL(clicked()),this,SLOT(LabelText()));
LabelText槽里面
void MyDialog::LabelText()
{
this->label->setText(((QPushButton*)sender())->text());
}
编译吧.
这里一定要在所控制部件的槽中进行强制转换,否则没人知道你传递的是那个部件,十分方便.
但前者也有前者的好处,例如要给所指定部件添加一些自己设定的属性,后者则无法办到,它只能利用现有的部件进行自身属性的消息传递,而前者则很直观。
@陈梓瀚(vczh)
嘿嘿,多谢指教。这样看来的话,QT这种机制虽然要麻烦一点,但它就好像是个人定制的,我用多少拿多少,让思路又清晰一些。
没想到夜猫子也很多呀,哈哈 我先睡了。