QGraphicsView 子类和事件
QGraphicsView subclass and events
在我的项目中,我有一个QGraphicsView
和一个QGraphicsScene
。我需要在我的视图中添加一些额外的事件,所以我已经子类化了QGraphicsView
.
问题是当我设置mousePressEvent
时,我会覆盖拖动模式ScrollHandDrag
。
我的问题如下:有没有办法在默认QGraphicsView
答案之间切换mousePressEvent
和自定义答案(例如,使用m_click
来区分不同的情况)?
这是我的代码:
MyQGraphicsView.h
class MyQGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
MyQGraphicsView(QGraphicsScene *scene, QWidget *parent = 0);
public slots:
// void mousePressEvent(QMouseEvent * e);
private:
QGraphicsScene *m_scene;
int m_click;
};
MyQGraphicsView.cpp
MyQGraphicsView::MyQGraphicsView(QGraphicsScene *scene, QWidget *parent) :
QGraphicsView(parent),
m_scene(scene),
m_click(0)
{
setScene(m_scene);
}
/*void MyQGraphicsView::mousePressEvent(QMouseEvent * e)
{
double rad = 1;
QPointF pt = mapToScene(e->pos());
if (m_click)
{
m_scene->addEllipse(pt.x()-rad, pt.y()-rad, rad*2.0, rad*2.0, QPen(), QBrush(Qt::SolidPattern));
m_click = 0;
}
else
{
m_click = 1;
}
}*/
基本上我希望代码做的是:当m_click=1
时,画一个点,但当m_click=0
使用ScrollHandDrag
时。
我可以让两者分开工作,但不能同时工作。
if ( !m_click ) {
QGraphicsView::mousePressEvent(e);
}
只需调用父类的实现即可使用"正常"行为。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 子类化 QGraphicsView,自定义鼠标事件
- QGraphicsView 子类和事件
- CBT_Hook、HCBT_MINMAX事件或子类化以隐藏对话框窗口.C++在Windows上