0

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

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...)上,事件处理程序总是(!!!)有一个发送者参数,指示调用事件的对象实例。

那么,如何在 BlackBerry Cascades 中做到这一点?

PS。请不要告诉我我必须创建自己的 Button 子类,添加一个 SIGNAL onClicked(MyButton *sender) 并传播它......这将结束我的 BlackBerry 开发初期。:)

4

1 回答 1

0

此处的标准 BB 论坛已回答了一个非常相似的问题:

http://supportforums.blackberry.com/t5/Native-Development/Tracking-Signal-Sender/mp/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 _

它是 Qt 的一部分的实用程序类,旨在帮助解决这种确切情况。

于 2013-09-19T11:52:30.327 回答