如何保持源信号的参数,同时使用QSignalMapper?(How to keep the sour

2019-07-17 12:06发布

我遇到了,我需要保持映射的源信号的参数有问题。 到目前为止,我只找到例子来不带任何参数映射信号。 例如,被点击()信号:

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)));

不过,我需要一些信号与自身的参数映射,例如点击(布尔)信号,则SLOT需要有两个参数doStuff(BOOL,QString的):

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

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

但是,它不喜欢这个工作? 有没有解决办法?

谢谢!

Answer 1:

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

看文档:
此类采集一组参数的信号,并重新发射它们与整数,字符串或相应于发送该信号的对象部件的参数。

有解决的办法:

如果使用的Qt4然后我建议你实现自己的信号变换器,支持你所需要的参数。
QSignalMapper实施将是很好的例子开始。

但是,如果QT5使用 ,那么你可以做的正是你需要的东西,而不使用QSignalMapper可言。 只是信号连接到拉姆达:

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

我认为taxFileButton是实例TaxFileButton类。

如果C ++ 11拉姆达不适合某些原因然后tr1::bind可被用于结合this"taxfile.txt"值。
请注意,这样的连接不被中断时自动this对象被销毁。 更多详情, 点击这里 。



文章来源: How to keep the source signal's parameters while using QSignalMapper?