bb :: cascades :: Button:单击处理程序 - 确定发件人

时间:2013-09-19 09:18:51

标签: button handler blackberry-10 blackberry-cascades

我正在以编程方式创建多个(设计时未定义)按钮数。 如何确定在我的处理程序中单击了哪个按钮?

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开发的早期开始。 :)

1 个答案:

答案 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的一部分,旨在帮助解决这种情况。