大家好,最近用QGraphicsView和QGraphicsScene时碰到这样一个
问题:
首先自绘制一个
按钮控件,写的
比较简略
- class CButton : public QGraphicsWidget
- {
- Q_OBJECT
- public:
- CButton(QGraphicsItem* parent = 0);
- virtual CButton();
- // 设置按钮正常时的图片
- virtual void setNormalPic(QPixmap p);
- // 设置按钮被按下时的图片
- virtual void setPressedPic(QPixmap p);
- protected:
- // 自绘制按钮,在按下或弹起状态绘制相应图片
- virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0)
- }
然后定义一个page,里面会有若干个按钮控件
- CPage : public QGraphicsWidget
- {
- Q_OBJECT
- public:
- CPage(QGraphicsItem* parent = 0);
- virtual ~CPage();
- // ...
- protected:
- virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0)
- private:
- CButton* m_pButton[10];
- // ...
- }
CPage中重载的paint函数里面设置了
裁剪区域:painter->setClip(x1, x2, w, h)
然后我成功的在Cpage控件中绘制了10个CButton控件(此时已经将CPage加入到QGraphicsScene中),但是当我移动CButton控件时,当CButton超出了CPage定义的范围时,CButton没有任何被裁剪的迹象(CButton的父类已设置为CPage),我理想情况下,CButton超出了CPage定义的范围后,应该会被裁剪,达到超出边界不
显示的效果。我想了一下,CButton是不是浮在CPage上面,导致CPage::paint函数中设置的裁剪区域没起到作用?
父控件应该如何裁剪超出其范围(setGeometry)的
子控件?
请务必帮小弟指引一条路~~不胜感激~~