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_OBJECTclass CustomItem : public QObject, public QGraphicsItem
{
Q_OBJECT
...
}
然后如果出现error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const什么的错误,把编译目录删除重新编译就好。
以上是关于100分求助,Qt继承自QGraphicsItem的控件响应不了mousePressEvent事件怎么办?的主要内容,如果未能解决你的问题,请参考以下文章