封装QWidgets的正确方法?

时间:2010-12-28 13:06:51

标签: qt qt4 encapsulation

我正在创建一个Qt小部件(我们称之为A),它实际上是一个子类化的QGraphicsView。但是,我不想在我的小部件中公开QGraphicsView方法,只需要基本的QWidget接口和我自己的一些方法。因此,我想将A的一个实例封装为一个简单的QWidget子类的成员,我们将其称为B

现在我想知道,画这个的正确方法是什么?到目前为止,我已经给了B一个布局,其唯一的项目是A成员。但这感觉有些不对劲;例如,我需要覆盖默认的布局设置,以避免添加额外的边距等。这让我觉得有一些正确的方法可以做到这一点,我错过了。有什么想法吗?

修改:在RedX'回答的设置中,我的问题变为:在此设置中使用 gv的正确方法是什么?给A布局并向其添加gv,或覆盖A的绘画方法,而不是使用gv的那些?或其他什么?

2 个答案:

答案 0 :(得分:3)

我认为没有更好的方法。如果您不想使用布局,可以像这样覆盖父级的resizeEvent():

void A::resizeEvent( QResizeEvent* ) {
    m_graphicsView->setGeometry( QRect( 0, 0, size() ) );
} 

答案 1 :(得分:0)

我认为你是想这样做的?

class A : public QWidget{
  QGraphicsView* gv; //use this to do whatever you need
};

这应该公开一个QWidget,在内部你可以使用gv从QGraphicsWidget做你需要的任何事情。