QSignalMapper信号映射类

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

QSignalMapper信号映射类

 

  关键代码:

 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信号映射类

上一篇:call bind apply 的区别?


下一篇:苹果Safari浏览器下载