QGraphicsItem Text不会检测鼠标标志

时间:2012-04-29 13:40:15

标签: c++ qt mouseover qgraphicsitem qt4.7

我想要做的很简单,当鼠标在qgraphicsitem上时,我希望它改变它的文本值。稍后我想用它来点击图像(即图像信息)时弹出文本

到目前为止,这是我的代码:

#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() );
}

有些人使用双击事件,但我希望不使用它们,但是......如果这是完成工作的唯一方法,那就没关系。

1 个答案:

答案 0 :(得分: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");

它应该做你期望的。