Wan*_*ang 7 qt qt4 signals-slots
我遇到了一个需要保留映射源信号参数的问题.到目前为止,我只找到了没有任何参数映射信号的示例.例如,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)));
Run Code Online (Sandbox Code Playgroud)
但是,我需要使用自己的参数映射一些信号,例如clicked(bool)信号,然后SLOT需要有两个参数doStuff(bool,QString):
connect(taxFileButton, SIGNAL(clicked(bool)),
signalMapper, SLOT (map()));
connect(signalMapper, SIGNAL(mapped(QString)),
this, SLOT(doStuff(bool,QString)));
Run Code Online (Sandbox Code Playgroud)
但是,它不像这样工作?有什么工作吗?
谢谢!
QSignalMapper 不提供传递信号参数的功能.
请参阅文档:
此类收集一组无参数信号,并使用与发送信号的对象相对应的整数,字符串或窗口小部件参数重新发出它们.
有办法解决这个问题:
如果使用Qt4,那么我建议您实现自己的信号映射器,它支持您需要的参数.
QSignalMapper实施将是一个很好的例子.
但如果使用Qt5,那么你可以完全按照自己的需要进行操作QSignalMapper.只需将信号连接到lambda:
connect(taxFileButton, &TaxFileButton::clicked, [this](bool arg) {
doStuff(arg, "taxfile.txt");
} );
Run Code Online (Sandbox Code Playgroud)
我假设taxFileButton是TaxFileButton类的实例.
如果C++ 11 lambda由于某种原因不适合,则tr1::bind可以用于绑定this和"taxfile.txt"值.
请注意,当this对象被销毁时,这种连接不会自动断开.更多细节在这里.
| 归档时间: |
|
| 查看次数: |
4067 次 |
| 最近记录: |