gpt4 book ai didi

qt - 使用 QSignalMapper 时如何保持源信号的参数?

转载 作者:行者123 更新时间:2023-12-04 11:55:21 31 4
gpt4 key购买 nike

我遇到了一个问题,我需要保留映射源信号的参数。到目前为止,我只找到了没有任何参数的映射信号的示例。
例如,clicked() 信号:

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

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

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

但是,我需要使用自己的参数映射一些信号,例如 clicked(bool) 信号,然后 SLOT 需要有两个参数 doStuff(bool,QString):
connect(taxFileButton, SIGNAL(clicked(bool)),
signalMapper, SLOT (map()));

connect(signalMapper, SIGNAL(mapped(QString)),
this, SLOT(doStuff(bool,QString)));

但是,它不是这样工作的吗?有什么解决办法吗?

谢谢!

最佳答案

QSignalMapper不提供传递信号参数的功能。

见文档:
本课收集了一组无参数信号,并使用与发送信号的对象相对应的整数、字符串或小部件参数重新发出它们。

有办法解决这个问题:

如果使用Qt4 那么我建议实现你自己的信号映射器,它支持你需要的参数。
QSignalMapper implementation将是一个很好的例子。

但是如果使用 Qt5 那么你可以在不使用 QSignalMapper 的情况下做你需要的事情一点也不。只需将信号连接到 lambda:

connect(taxFileButton, &TaxFileButton::clicked, [this](bool arg) {
doStuff(arg, "taxfile.txt");
} );

我假设 taxFileButtonTaxFileButton 的实例类(class)。

如果 C++11 lambda 由于某种原因不适合,那么 tr1::bind可用于绑定(bind) this"taxfile.txt"值(value)观。
请注意,当 this 时,此类连接不会自动断开。对象被销毁。
更多细节是 here .

关于qt - 使用 QSignalMapper 时如何保持源信号的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13989297/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com