开发者

Qt: connecting signal to slot having more arguments

I want to connect a signal开发者_运维技巧 clicked() from the button to a slot of different object.

Currently I connect signal to helper method and call desired slot from there:

connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));

void buttonClicked() { // Helper method. I'd like to avoid it.
    someObject.desiredSlot(localFunc1(), localFunc2());
}

But maybe there is a more simple and obvious way to do this?


is this what you want to do:

the signal clicked should be connected to the "desiredSlot" which takes two arguments that are returned by localFunc1 & 2 ??

this is not possible, as you can read in the QT docs. A slot can take less arguments than provided by the signal - but not the opposite way! (The documentation says "This connection will report a runtime error")


This ought to work with the new signal/slot mechanism in qt 5:

connect( button, &QPushButton::clicked, [&](){ someObject.desiredSlot( localFunc1(), localFunc2() ); } );

You will need to adjust the lambda capture to your needs.


In some cases, default arguments may help, e.g. declare desiredSlot as:

desiredSlot(int a=0, int b=0)

You cannot access members in default argument though.


That is not the way to connect signals and slots in QT. You should use:

connect(button, SIGNAL(clicked()), receiver, SLOT(slotToBeCalled());

Have a look at the QT documentation.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜