100分求助,Qt继承自QGraphicsItem的控件响应不了mousePressEvent事件怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100分求助,Qt继承自QGraphicsItem的控件响应不了mousePressEvent事件怎么办?相关的知识,希望对你有一定的参考价值。

Qt编程。。我想自己做个控件,写了如下代码,但是发觉这个控件无论怎么点击也没有响应。。。怎么回事呢。。求助ing。。。不但鼠标事件无响应,就连keyPressEvent也是没有响应的

class diamond : public QGraphicsItem //这是我继承的控件定义,继承自QGraphicsItem



public:

diamond(int x,int y,int w,int h,dc_scene *in_scene);

int dx,dy,dw,dh;

void paint(QPainter * painter,const QStyleOptionGraphicsItem *option,QWidget * widget); //paint函数里,我在屏幕上画了个方块,之后试着点击这个方块,毫无反映啊

QRectF boundingRect() const;

dc_scene *scene;

protected:

void mousePressEvent(QGraphicsSceneMouseEvent *event); //这块把事件函数声明了

void keyPressEvent ( QKeyEvent * event );

;

下面这是鼠标事件的函数,似乎无论怎么点击,也无法进入这个函数

void diamond::mousePressEvent(QGraphicsSceneMouseEvent *event)



scene->addLine(0,0,100,100); //这句话都是没响应的。。。

if(event->button() == Qt::LeftButton)

scene->clear();



else

QGraphicsItem::mousePressEvent(event);





怎么回事呢。。。初学Qt的无知小白求解啊啊啊啊T_T

是不是我漏了什么步骤呢?比如修改event()分发事件函数之类的。。求解释。。还可以再加分的

经过测试除了要覆盖时间函数之外无需任何其他动作……
所以,请问您那scene是什么?是这个类的实例所在的QGraphicsScene的指针?dc_scene这是个啥?缺少这些代码我真的不知道是什么问题了。
QGraphicsItem 的所有事件都是由QGraphicsScene获得的,所以一定要确保QGraphicsScene或者是其子类的事件分发函数被正确重载或者使用默认的。
参考技术A QGraphicsItem 接收 QGraphicsScene 的 sceneEvent() 来传递事件。你有继承QGraphicsScene 吧,有没有重写sceneEvent这个函数?你可以看看QGraphicsItem 的文档

自定义QGraphicsItem 使用信号/槽

Qt中使用信号/槽前提是继承QObject,同时添加 Q_OBJECT
class CustomItem : public QObject, public QGraphicsItem
{
Q_OBJECT

...
}

然后如果出现error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const什么的错误,把编译目录删除重新编译就好。

以上是关于100分求助,Qt继承自QGraphicsItem的控件响应不了mousePressEvent事件怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

Qt QGraphicsItem使用信号槽注意事项

Qt中图元对象的多重集成

自定义QGraphicsItem 使用信号/槽

Qt Scaling Custom QGraphicsItem with unscaled text

来自两个抽象类的多重继承 (Qt)

QGraphicsScene 上的静态 QGraphicsItem