首页 > 移动平台 > 详细

QSignalMapper信号映射类

时间:2020-10-19 21:28:22      阅读:48      评论:0      收藏:0      [点我收藏+]

  一个小demo,点击不同的按钮,输入框会显示不同按钮上的文字。

技术分享图片

 

  关键代码:

 1  //定义一个网格布局
 2    QGridLayout *pLayout = new QGridLayout();
 3     //窗口设置布局
 4     this->centralWidget()->setLayout(pLayout);
 5 
 6     QString str="button1,button2,button3,button4,button5,button6";
 7    //按逗号拆分
 8     QStringList StrList =str.split(",");
 9     //定义一个信号映射对象
10     QSignalMapper *pmap = new QSignalMapper(this);
11 
12     for(int i=0;i<StrList.length();i++)
13     {
14         QPushButton *pBtn = new QPushButton(this);
15         pBtn->setText(StrList.at(i));
16         //当按下按钮后signalmapper先接受信号,暂时不处理
17         connect(pBtn,SIGNAL(clicked()),pmap,SLOT(map()));
18         //在处理之前,把按钮和字符串组成映射关系,给按钮关联一个字符串
19         pmap->setMapping(pBtn,pBtn->text());
20         //把按钮放到布局中第i行第0列
21         pLayout->addWidget(pBtn,i,0);
22 
23     }
24     QLineEdit *pEdit=new QLineEdit(this);
25     //上面关联的是QString类型,signalmapper就会发送参数是QString的信号。根据这个信号
26     //就能判断是哪个按钮
27     connect(pmap,SIGNAL(mapped(QString)),pEdit,SLOT(setText(QString)));
28 
29     pLayout->addWidget(pEdit,0,1);

 

  在第27行也可以自定义槽函数,在.h文件中先声明参数为QString槽函数(Qt4),在cpp文件中实现槽函数,根据发送过来的QString进一步做出判断,如果是button1执行什么样的操作,如果是button2又执行什么样的操作。

 1 connect(pmap,SIGNAL(mapped),this,SLOT(myslot(QString)));
 2 
 3 void mysignalmapper::myslot(QString  text)
 4 {
 5      if(text=="button1")
 6      {
 7            //....
 8       }  
 9      else if(text == "button2")
10      {
11            //...
12      }
13      ...
14 }

 

QSignalMapper信号映射类

原文:https://www.cnblogs.com/xiaoxiaolinux/p/13841120.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!