Qt 封装QWidget的正确方法?

Qt 封装QWidget的正确方法?,qt,qt4,encapsulation,Qt,Qt4,Encapsulation,我正在制作一个Qt小部件(我们称之为a),它实际上是一个子类的QGraphicsView。但是,我不想在我的小部件中公开QGraphicsView方法,只想公开基本的QWidget接口和我自己的一些方法。因此,我想将A的一个实例封装为一个简单的QWidget子类的成员,我们称之为B 现在我想知道,画这个的正确方法是什么?到目前为止,我已经给出了B一个布局,它的唯一项是a成员。但这感觉有点不对;例如,我需要覆盖默认布局设置,以避免添加额外的页边距等。这让我觉得有一些正确的方法可以做到这一点,但我没

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

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


编辑:在RedX'答案的设置中,我的问题变成:在此设置中使用
gv
的正确方式是什么?给
A
一个布局并向其添加
gv
,或者覆盖
A
的绘制方法,以替代
gv
的绘制方法?还是别的什么?

我想你是想这么做

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

这应该将a公开为QWidget,在内部您可以使用
gv
从QGraphicsWidget执行您需要的任何操作。

我想您正在尝试这样做

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

这应该将a公开为QWidget,在内部您可以使用
gv
从QGraphicsWidget执行您需要的任何操作。

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

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

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

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

是的,这就是现在的设置。接下来的问题是:在此设置中使用
gv
的正确方法是什么?给
A
一个布局并向其添加
gv
,或者覆盖
A
的绘制方法,以替代
gv
的绘制方法?或者别的什么?如果您只是试图减少一些边距,那么重写paint方法似乎是过火了。使用
a
中的布局,并将
gv
添加到该布局中。这也会让意图更加清晰。好吧,这就是我要做的。我同意你的推理。我只是想确认没有其他被认为是“正确的方式”的方式。是的,这就是现在的设置。接下来的问题是:在此设置中使用
gv
的正确方法是什么?给
A
一个布局并向其添加
gv
,或者覆盖
A
的绘制方法,以替代
gv
的绘制方法?或者别的什么?如果您只是试图减少一些边距,那么重写paint方法似乎是过火了。使用
a
中的布局,并将
gv
添加到该布局中。这也会让意图更加清晰。好吧,这就是我要做的。我同意你的推理。我只是想确认没有其他被认为是“正确的方式”的方式。