2

Qtでアプリを作成していますが、問題が発生しました。

qgraphics シーンがあります。シーンを作成し、ユーザーがシーン アイテムをクリックしたときにいくつかのアクションが実行されるようにしました。

selectionChanged()信号 は検出できますが、次のようになります。

  1. シグナルは 2 回発せられます (クリックされたアイテムに対して 1 回、以前に選択されたアイテム (選択解除) に対して 1 回なので、両方のアイテムに対して必要なアクションが 2 回実行されます)。

  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 に答える