2012-04-29 3 views
1

私がやっていることはかなり単純です。マウスがqgraphicsitem上にあるときにテキスト値を変更したいのです。その後、私はイメージ(画像のすなわち情報)QGraphicsItemTextはマウスのフラグを検出しません

をクリックすると、ポップアップテキストを、これを使用するには、ここでは、これまでに私のコードです:

#include <QtGui/QApplication> 
#include <QtGui/QGraphicsItem> 
#include <QtGui/QGraphicsTextItem> 
#include <QtGui/QGraphicsScene> 
#include <QtGui/QGraphicsView> 
#include <QtGui/QPixmap> 

int main(int argc, char * * argv) 
{ 
    QApplication  app(argc, argv); 
    QGraphicsScene scene; 
    QGraphicsView  view(&scene); 

    QGraphicsTextItem text("this is my text"); 
    scene.addItem(&text); 
    scene.setActivePanel(&text); 
    text.setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); 
    text.setAcceptHoverEvents(true); 
    text.setAcceptTouchEvents(true); 
    if (text.isUnderMouse() || text.isSelected()){ 
     text.setPlainText("test"); 
    } 
    view.show(); 

    return(app.exec()); 
} 

一部の人々は、ダブルクリックのイベントを使用しますが、私はそれらを使用しないことを望んでいたが、それが仕事を完了する唯一の方法なら、それは大丈夫だ。

答えて

0

このコードブロック:あなたのビューにも表示される前に

if (text.isUnderMouse() || text.isSelected()){ 
    text.setPlainText("test"); 
} 

は、正確に一度だけ実行されます。だからこれはあなたが期待していることをするチャンスは全くありません。

これ以上の作業を行う必要があります。すなわち、QGraphicsTextItemのカスタムサブクラスを作成し、適切なイベントハンドラをオーバーライドする必要があります。

は、ここでは、ホバリング時に変更したテキストを処理するためにそれを行うことができる方法です:

class MyTextItem: public QGraphicsTextItem 
{ 
    public: 
     MyTextItem(QString const& normal, QString const& hover, 
        QGraphicsItem *parent=0) 
      : QGraphicsTextItem(normal, parent), normal(normal), hover(hover) 
     { 
     } 

    protected: 
     void hoverEnterEvent(QGraphicsSceneHoverEvent *) 
     { 
      setPlainText(hover); 
     } 
     void hoverLeaveEvent(QGraphicsSceneHoverEvent *) 
     { 
      setPlainText(normal); 
     } 
    private: 
     QString normal, hover; 

}; 

あなたのコードにそれを追加し、にtext宣言を変更:

MyTextItem text("this is my text", "test"); 

、それは何をすべき期待する。

+0

私はちょっと愚かな気がします...もちろん、これらの行は一度しか実行されませんでしたが、私は何が起こっているのか分かりません。私は睡眠を取る必要があると思います。とにかく、マットありがとう! –