2

我在qt中创建一个应用程序,我遇到了一个问题。

我有一个 qgraphics 场景。我创建了场景,并在用户单击场景项目时执行了一些操作。

我可以检测到selectionChanged()信号,但是:

  1. 该信号被发出两次(一次用于单击的项目,一次用于先前选择的项目(取消选择),因此两个项目所需的操作发生两次)。

  2. 单击某个项目时,它仍处于选中状态,我无法再次单击它...(我尝试设置item->setSelected(false),但它陷入了选择/取消选择的无限循环...)。

任何人都知道如何解决这个问题?

我想要实现的是在取消选择时不执行任何操作,并且能够重新单击单击的项目并重新执行该操作。

4

1 回答 1

1

定义一个插槽yourSlot()并将其连接到信号selectionChanged()。在此插槽中,您检查是否选择了负责信号发射的项目。

void yourSlot() {
   QGraphicsItem  *item = qobject_cast<QGraphicsItem  *>(sender());

   if (item) {
      if ( item->isSelected() ) { //this item is selected
         doSomethin();

         //*deselect* the item so that it can be selected again
         item->setSelected(false);
      } 
      else { //the signal was fired because the item was deselected
        //ignore()
      }
   }
}

我现在无法尝试,因为我认为这台计算机上没有安装 Qt,我认为它应该可以工作。

于 2011-05-24T12:27:31.507 回答