封装 QWidgets 的正确方法?
Posted
技术标签:
【中文标题】封装 QWidgets 的正确方法?【英文标题】:Proper way to encapsulate QWidgets? 【发布时间】:2010-12-28 13:06:51 【问题描述】:我正在制作一个 Qt 小部件(我们称之为 A
),它实际上是一个子类 QGraphicsView。但是,我不想在我的小部件中公开 QGraphicsView 方法,只是基本的 QWidget 接口和我自己的一些方法。因此,我想将A
的一个实例封装为一个简单的QWidget 子类的成员,我们称之为B
。
现在我想知道,绘制这个的正确方法是什么?到目前为止,我已经给B
一个布局,其唯一的项目是A
成员。但这感觉有点不对劲。例如,我需要覆盖默认布局设置以避免添加额外的边距等。这让我觉得有一些我缺少的正确方法可以做到这一点。有什么想法吗?
编辑:在 RedX 的回答设置中,我的问题变成:在此设置中使用gv
的正确方法是什么?给A
一个布局并添加gv
,或者覆盖A
的绘画方法来代替gv
的那些?还是别的什么?
【问题讨论】:
【参考方案1】:我认为没有更好的方法。如果您不想使用布局,可以像这样覆盖父级的 resizeEvent():
void A::resizeEvent( QResizeEvent* )
m_graphicsView->setGeometry( QRect( 0, 0, size() ) );
【讨论】:
【参考方案2】:我认为您正在尝试这样做?
class A : public QWidget
QGraphicsView* gv; //use this to do whatever you need
;
这应该将 a 作为 QWidget 公开,并且在内部您可以使用 gv
从 QGraphicsWidget 执行您需要的任何操作。
【讨论】:
是的,这就是现在的设置。那么问题就变成了:在此设置中使用gv
的正确方法是什么?给A
一个布局并添加gv
,或者覆盖A
的绘画方法来代替使用gv
的那些?还是别的什么?
如果你只是想减少一些边距,覆盖paint方法似乎是矫枉过正。使用A
中的布局并将gv
添加到其中。这也应该使意图更清晰。
好的,这就是我要做的。我同意你的推理。我只是想检查一下是否有其他方式被认为是“正确的方式”。以上是关于封装 QWidgets 的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章