2012-04-29 3 views
1

마우스가 qgraphicsitem 위에있을 때 아주 간단합니다. 텍스트 값을 변경하고 싶습니다. 나중에 내가QGraphicsItemText가 마우스 플래그를 감지하지 못합니다.

여기 내 코드는 지금까지의 (이미지의 정보를 IE) 이미지를 클릭하면 팝업 텍스트이를 사용하려면 :

#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

나는 어리 석다는 느낌이 들었습니다. 물론 그 라인은 단 한 번만 움직 였고, 저와 무슨 일이 일어나고 있는지 모르겠습니다. 저는 잠을 자야 할 것 같아요. 어쨌든, 매트 감사합니다! –