我正在以编程方式创建多个(设计时未定义)按钮数。 如何确定在我的处理程序中单击了哪个按钮?
for (int i = 0; i < XXX; i++) {
Button *btn = Button::create();
QObject::connect(btn, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
...
}
void MyClass::onButtonClicked() {
???? Which button ???
}
在我之前使用的所有平台上(Borland.VCL,Cocoa,Cocoa Touch,WinRT / PRT,Android ...)事件处理程序始终(!!!)都有一个sender参数,指示对象实例调用了该事件。
那么,如何在BlackBerry Cascades中实现呢?
PS。请不要告诉我,我必须创建自己的Button类,添加一个SIGNAL onClicked(MyButton * sender)并传播它......这将结束我的BlackBerry开发的早期开始。 :)
答案 0 :(得分:0)
这里的标准BB论坛已经回答了一个非常类似的问题:
http://supportforums.blackberry.com/t5/Native-Development/Tracking-Signal-Sender/m-p/1969275#M5539
所以你不必去那里,这是有用的回答的问题和文本:
我创建了一个阵列多个按钮并分配给特定功能。 但我想知道用户按下了哪个按钮。任何的想法? 我该如何实现信号和插槽
for(int i=0;i<8;i++)
{
button[i]= Button::create();
buttonContainer->add(button[i]);
QObject::connect(button[i], SIGNAL(clicked()), this, SLOT(doStuffs()));
}
1)在插槽中使用QObject :: sender()并将结果转换为Button。如果您首先执行“button [i] .tag = i”,那么您可以在插槽中找到确切触发的按钮。不幸的是,您首先需要子类Button并包含整数标记值。我已经就此提出了功能请求。
2)您也可能想要查找QSignalMapper:
http://qt-project.org/doc/qt-4.8/qsignalmapper.htm L
这是一个实用类,它是Qt的一部分,旨在帮助解决这种情况。