• 3786阅读
  • 0回复

[提问]QGraphicsView中父控件如何裁剪子控件 [复制链接]

上一主题 下一主题
离线seefront
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-17
大家好,最近用QGraphicsView和QGraphicsScene时碰到这样一个问题
首先自绘制一个按钮控件,写的比较简略
  1. class CButton : public QGraphicsWidget
  2. {
  3.      Q_OBJECT
  4. public:
  5. CButton(QGraphicsItem* parent = 0);
  6. virtual CButton();
  7.      // 设置按钮正常时的图片
  8.      virtual void setNormalPic(QPixmap p);
  9.      // 设置按钮被按下时的图片
  10.      virtual void  setPressedPic(QPixmap p);
  11. protected:
  12.       // 自绘制按钮,在按下或弹起状态绘制相应图片
  13.       virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0)
  14. }

然后定义一个page,里面会有若干个按钮控件
  1. CPage : public QGraphicsWidget
  2. {
  3.      Q_OBJECT
  4. public:
  5.      CPage(QGraphicsItem* parent = 0);
  6.      virtual ~CPage();
  7.      //  ...
  8. protected:
  9. virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0)
  10. private:
  11.      CButton*       m_pButton[10];
  12.      // ...
  13. }
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)的子控件

请务必帮小弟指引一条路~~不胜感激~~



快速回复
限100 字节
 
上一个 下一个