lvmengzou的个人主页

http://www.qtcn.org/bbs/u/157768  [收藏] [复制]

lvmengzou

  • 2

    关注

  • 2

    粉丝

  • 26

    访客

  • 等级:新手上路
  • 总积分:48
  • 男,2011-11-25

最后登录:2023-12-25

更多资料

日志

QSignalMapper类的使用

2015-04-25 06:58
  Qt中当定义了很多的按钮,而他们的信号都相同时(比如都是点击信号),没有必要给他们每个都设置信号和槽的链接,QSignalMapper给我们解决了这个难题。
    今天完成这个相似的功能时,不知道怎么办,就问了下度娘,结果就实现了,效果简直太完美了,如果不这么做,我还真的不知道该怎么办。
    在完成的过程中,出现了一个问题,看了半天也没有解决,弄的我是一头雾水,和网上的例子是一模一样的,可就是无法实现装换,最后看了下函数原型,原来和我要船的参数不匹配,我需要的是int型参数,而给传的时候是QString型的,真是郁闷啊!
主要步骤如下:


1)定义一个QSignalMapper对象
    QSignalMapper *signalmapper = new QSignalMapper(this);
2)建立一个无参数的链接
   connect(tool_button,SIGNAL(clicked()),signalmapper,SLOT(map()));
3)进行转换
  signalmapper->setMapping(tool_button,nIndex);
  注意:在转换的时候要细心了,根据你的需要进行转换,setMapping()函数中的参数可不是随意的,第二个参             数就是你要转换的参数,我需要int型,循环中的nIndex就是整形的,要不然在进行后面信号和槽的链接的时候           会很苦逼!
4)最后我们把信号转发到最终的处理函数slot_Turnpage(int)(信号槽)中
    connect(signalmapper,SIGNAL(mapped(int)),this,SLOT(slot_Turnpage(int)));
5)在槽函数中进行相应的操作。(比如)




[cpp] view plaincopyprint?

  1. void ToolBar::slot_Turnpage(int current_page)  




[cpp] view plaincopyprint?

  1. {  




[cpp] view plaincopyprint?

  1. switch (current_page) {  




[cpp] view plaincopyprint?

  1. case 0:  




[cpp] view plaincopyprint?

  1. qDebug()<<"第1个按钮被按下";  




[cpp] view plaincopyprint?

  1. break;  




[cpp] view plaincopyprint?

  1. case 1:  




[cpp] view plaincopyprint?

  1. qDebug()<<"第2个按钮被按下";  




[cpp] view plaincopyprint?

  1. break;  




[cpp] view plaincopyprint?

  1. default:  




[cpp] view plaincopyprint?

  1. break;  




[cpp] view plaincopyprint?

  1. }  




[cpp] view plaincopyprint?

  1. }  

QSignalMapper 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject*参数或者QWidget*参数的信号,在具体的项目中我们可以根据需要进行相应的转换。
分类:默认分类|回复:0|浏览:1035|全站可见|转载
 

下一篇: QTableView使用小结

上一篇: QT调试  转载

Powered by phpwind v8.7 Certificate Copyright Time now is:05-03 03:50
©2005-2016 QTCN开发网 版权所有 Gzip disabled