Qt学习笔记1--更高级Signals and Slots的用法

来源:互联网 发布:交大知行大厦九层 编辑:程序博客网 时间:2024/05/24 03:48

今天想自己用Qt编一个Ubuntu下简易的计算器,

设想每次按下一个数字键或者运算符,输出界面上都会显示各自数字或字符,

想到Qt助手里用QSignalMapper可以编写更加简洁的代码

 

当多个signal连接到一个同一个slot,而且slot对每个signal处理不同时,用到QSignalMapper

The QSignalMapper class is provided for situations where many signals are connected to the same slot and the slot needs to handle each signal differently.

声明用于显示所按下数字的lineEdit以及各个按钮
 QLineEdit* lineEdit = new QLineEdit("0");
 lineEdit->setAlignment(Qt::AlignRight);
 QPushButton* pushButton = new QPushButton[20];
/*
               。
               。
设置按钮显示文本
               。


*/

pushButton[12].setText("1");
 pushButton[13].setText("2");
 pushButton[14].setText("3");
 pushButton[15].setText("-");
               。
               。
               。

QSignalMapper* signalMapper = new QSignalMapper;
               。
               。
               。
signalMapper->setMapping(&pushButton[12], QString("1"));
signalMapper->setMapping(&pushButton[13], QString("2"));
signalMapper->setMapping(&pushButton[14], QString("3"));
signalMapper->setMapping(&pushButton[15], QString("-"));
               。
               。
               。
connect(&pushButton[12], SIGNAL(clicked()),signalMapper, SLOT (map()));
connect(&pushButton[13], SIGNAL(clicked()),signalMapper, SLOT (map()));
connect(&pushButton[14], SIGNAL(clicked()),signalMapper, SLOT (map()));
connect(&pushButton[15], SIGNAL(clicked()),signalMapper, SLOT (map()));
               。
               。
               。
connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(setNum(const QString &)));