有几个小部件共享相同的信号槽(事件处理程序),我如何找出哪一个被点击?

时间:2010-09-29 10:45:30

标签: qt

在我的项目中,我使用了从QWidget类派生的自定义圆形按钮小部件。我已经将几个小部件添加到父窗口小部件中。

单击其中一个自定义按钮时,如何找出单击哪个按钮?

向父窗口小部件添加自定义按钮:

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

}

我的父窗口小部件是 ShotViewCTRL (继承自QWidget),子窗口小部件是 ShotButton (自定义控件,继承自QWidget)。

控件运行正常。它正在向父对象发送发送。在我的问题中,我添加了相同的自定义控件10次。

我需要找到点击了哪个控件?请帮我找到解决方案。

我已经参考了Qt文档来查找子窗口小部件,但我不明白。一些示例代码会很棒。

3 个答案:

答案 0 :(得分:3)

QSignalMapper正是您要找的。使用QSignalMapper,您可以添加类似Id(甚至是指向QButton本身的指针)作为信号发射率的附加数据,您必须调整插槽以便使用其他数据(ID或指针)。

然后要么在插槽本身区分你给你的对象的id 一些虚函数类型()所以你可以区分它甚至尝试强制转换并捕获错误(提示:不要尝试最后一种方法,它可能在不同的编译器上有所不同。)

答案 1 :(得分:2)

您可以使用QObject::Sender功能查找QObject发送信号的内容。关于文档中的第一个警告,这就是你要搜索的内容。

答案 2 :(得分:0)

您为具有相同信号的不同按钮指定不同的插槽。您可以识别不同的按钮单击