开发者

With several widgets sharing the same signal slot (event handler), how do I find out which one has been clicked?

开发者 https://www.devze.com 2023-01-18 05:23 出处:网络
In my project I am using acustom circle-shaped button widget derived from the QWidget class. I have added several of these widgets to a parent widget.

In my project I am using a custom circle-shaped button widget derived from the QWidget class. I have added several of these widgets to a parent widget.

When one of these custom buttons is clicked, how do I find out which one was clicked?

Adding custom button to parent widget:

void ShotViewCTRL::addShot(QString shotNanme)
{
    ShotButton *btnShot=new ShotButton(this);
    btnShot->shotName=shotNanme;

    connect(btnShot,SIGNAL(Shot_Selected()),this,SLOT(SHOT_CLICKED()));
    btnShot->CreateButton();
    btnShot->show();

}

My parent widget is开发者_运维问答 ShotViewCTRL (inherits from QWidget), the child widget is ShotButton (custom control, inherits from QWidget).

The control is working fine. It's sending sending to parent object. In my problem, I added the same custom control 10 times.

I need to find which control was clicked? Please help me find the solution.

I have referred to the Qt documentation to find the child widget, but I did't understand. Some sample code would be great.


QSignalMapper is what you are looking for. With QSignalMapper, you can add something like an Id (or even a pointer to the QButton itself) as additional data to the signal emittance and you have to adjust your slot so it takes additional data (ID or Pointer).

Then either distinguish in the slot itself by the id you give your objects some virtual function type() so you can distinguish with that or even try casting and catch errors (Tip: don't try the last method, it may work differently on different compiler).


You can use the QObject::Sender function to find which QObject sends the signal. Regarding the first warning in the doc, it's what you are searching for.


you specify different slots for different buttons with same signal.with that you can recognize the different button click

0

精彩评论

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