1

在我的代码中,我在循环内创建相同类型的新对象并将信号连接到对象槽。这是我的审判。

A * a;
QList<A *> aList;
int aCounter = 0;
while(aCounter < 2)
{
   a = new A;
   aList.push_back(a);
   connect(this,SIGNAL(somethingHappened()),aList[aCounter],SLOT(doSometing()));
   aCounter++;

}

当发出某事发生的信号时。两个对象插槽都被调用。但我需要单独处理它们。将信号连接到循环内的插槽是错误的吗?如果没有,我怎么能实现我的愿望?

4

2 回答 2

3

如果我理解正确,您可能想做这样的事情?

A * a;
QList<A *> aList;
int aCounter = 0;
while(aCounter < 2)
{
   a = new A;
   aList.push_back(a);

   if ( aCounter == 0 )
      connect(this,SIGNAL(somethingHappened()),aList[aCounter],SLOT(doSometing()));

   aCounter++;
}

这仅将信号连接到第一个对象(但这很明显)。无法将信号连接到多个插槽,而只能将其发送到一个。

如果这真的是您的意图,那么如果您实际上将这个连接到循环之外会更优雅。

另一种可能性是像以前一样连接所有内容,但在 A 的每个实例中存储某种 ob 成员变量,并使 doSomething() 的行为依赖于此。

于 2010-06-24T11:46:55.777 回答
2

据我了解您的问题,您想知道 doSomething() 是否在第一个或第二个对象上被调用。我可能会这样做的方式是首先给 A 类一个布尔成员并将其设置在循环中。这样对象就知道它的位置了。如果你有更多的对象,你可以给他们一个柜台。为了跟踪,在类 A 上有一个静态计数器变量。这一切都取决于你在这里真正想要实现的目标。

在循环中连接信号非常合理。

A * a;
QList<A *> aList;
int aCounter = 0;

while( aCounter < 2 )
{
   aList.push_back( new A );
   ++aCounter;
}

connect( this, SIGNAL( somethingHappened() ), aList[0], SLOT( doSometing() ) );
于 2010-06-24T11:21:55.330 回答