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

Мне кажется, что это глупо ... Конечно, эти строки будут работать только один раз, я не знаю, что со мной происходит. Думаю, мне нужно немного поспать. В любом случае, спасибо Мату! –

Смежные вопросы