我想要做的很简单,当鼠标在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() );
}
有些人使用双击事件,但我希望不使用它们,但是......如果这是完成工作的唯一方法,那就没关系。
答案 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");
它应该做你期望的。