QT——QSignalMapper
来源:互联网 发布:mac桌面文件突然消失 编辑:程序博客网 时间:2024/05/29 15:12
1、QSignalMapper类通过自定义信号发送者来捆绑信号。
2、QSignalMapper 类收集一组无参信号,然后以 integer, string 或者 widget为参数重新发送信号,相当于经过QSignalMapper转发后,发送无参信号的类发送的有参的信号。
3、QSignalMapper 类通过setMapping(),支持从特定的字符串或者整数映射到指定的类(指QPushButton及其他)的功能。然后,这些指定的类将被连接到map()槽上,这个槽将发送 mapped() 后的和原始的发信号的类的关联的带有字符串或者整数的信号。映射的关系随后通过removeMappings()可以被移除。<简单说,就是所有指定的类,譬如按钮,都和QSignalMapper的map(),建立连接,然后由QSignalMapper类负责发送不同指定对象映射的不同的信号>
4、例如:假设我们想创建包含一按钮组(像调色板)的自定义widget。一种方法是关联每个按钮的clicked()操作到属于它自己的自定义槽;但是这个列子中,我们想关联所有的按钮到一个槽中,并且通过被点击的按钮来参数化槽。
5、下面就是一个简单的自定义有一个信号的widget,clicked(),通过被点击为text按钮来发射信号:
class ButtonWidget : public QWidget
{
Q_OBJECT
public:
ButtonWidget(QStringList texts, QWidget *parent = 0);
signals:
void clicked(const QString &text);
private:
QSignalMapper *signalMapper;
};
在构造函数中,我们唯一需要实现的函数:
ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
: QWidget(parent)
{
signalMapper = new QSignalMapper(this);
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i / 3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(QString)),
this, SIGNAL(clicked(QString)));
setLayout(gridLayout);
}
文本清单传递给构造函数列表。信号映射者 QSignalMapper 被构造,并且为列表中每一个text创建一个的按钮。我们关联每一个按钮的clicked()信号和信号映射者
QSignalMapper
的map()槽,并且为每个按钮和按钮的text建立一种映射关系。最后我们关联映射者的mapped()信号和自定义组件的clicked() 信号。当使用者点击按钮时,自定义组件将会发送一个带有按钮文本信息的参数的clicked信号。==============================================================
总结:
1.所有信号都和 QSignalMapper 的 map()槽关联;
2.通过setMapping()建立,自定义对象和信号之间的关系(对应一个整数、字符串或者QWidget);
3.最后通过将
QSignalMapper
的 mapped(),和自定义的带参的函数相关联。 - QT——QSignalMapper
- QT——QSignalMapper
- QT QSignalMapper
- Qt学习笔记 - QSignalMapper
- Qt 学习笔记 - QSignalMapper
- QT之QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QT中QSignalMapper类的用法
- 【QT开发】信号转发器QSignalMapper的使用
- QT 巧用QSignalMapper分类有序地处理大量信号
- QT中QSignalMapper类信号转发器的使用和说明
- Qt编程12:QSignalMapper多对一信号影射简单使用
- 12.2多重继承
- php包含那点事情
- php入门微理解
- 【Android UI】自定义带按钮的标题栏
- 杭电 1421 搬寝室
- QT——QSignalMapper
- XML(1)——shema约束之命名空间
- crashlytics版本区分
- 使用C#开发百度空间验证码自动填写的工具
- 安卓学习笔记(一)
- Ranking System
- HTTP协议网络传输
- JS使用正则表达式操作字符串
- 保护android进程相关技术点