2012-04-29 70 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

我觉得有点傻......当然,这些线路将只运行一次,我不知道什么是我,我想我需要睡一会儿笑的发生。不管怎么说,谢谢你太! – 2012-04-29 16:17:55