高级信号和槽的使用(几个信号被连接到同一槽上,并且槽需要处理每个不同的信号)

本文介绍如何利用Qt的QSignalMapper类处理多个按钮触发相同槽函数的问题,通过信号映射实现不同按钮打开不同文件的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在当你需要信号发送者的信息时,QT提供了一个函数QObject::sender(),他返回指向一个信号发送对象的指针。

当有几个信号被连接到同一槽上,并且槽需要处理每个不同的信号,可使用 QSignalMapper类。

假设你用三个按钮来决定打开哪个文件:Tax File", "Accounts File", or "Report File"。

为了能打开真确的文件,你需要分别将它们的信号 QPushButton::clicked()连接到 readFile()。然后用QSignalMapper 的 setMapping()来映射所有 clicked()信号到一个 QSignalMapper对象。

signalMapper = new QSignalMapper(this);
signalMapper->setMapping(taxFileButton, QString("taxfile.txt"));
signalMapper->setMapping(accountFileButton, QString("accountsfile.txt"));
signalMapper->setMapping(reportFileButton, QString("reportfile.txt"));

connect(taxFileButton, SIGNAL(clicked()),
signalMapper, SLOT (map()));
connect(accountFileButton, SIGNAL(clicked()),
signalMapper, SLOT (map()));
connect(reportFileButton, SIGNAL(clicked()),
signalMapper, SLOT (map()));

然后,连接信号 mapped()到 readFile() ,根据被按下的按钮,就可以打开不同的文件。

connect(signalMapper, SIGNAL(mapped(const QString &)),
this, SLOT(readFile(const QString &)));



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值