在我的项目中,我使用了从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文档来查找子窗口小部件,但我不明白。一些示例代码会很棒。
答案 0 :(得分:3)
QSignalMapper
正是您要找的。使用QSignalMapper,您可以添加类似Id(甚至是指向QButton本身的指针)作为信号发射率的附加数据,您必须调整插槽以便使用其他数据(ID或指针)。
然后要么在插槽本身区分你给你的对象的id 一些虚函数类型()所以你可以区分它甚至尝试强制转换并捕获错误(提示:不要尝试最后一种方法,它可能在不同的编译器上有所不同。)
答案 1 :(得分:2)
您可以使用QObject::Sender
功能查找QObject
发送信号的内容。关于文档中的第一个警告,这就是你要搜索的内容。
答案 2 :(得分:0)
您为具有相同信号的不同按钮指定不同的插槽。您可以识别不同的按钮单击