为什么可以从QWidget创建一个对象而不在C ++程序的开头包含它

时间:2015-07-22 08:31:44

标签: c++ qt

这是一个简单的Qt C ++程序,可以创建GUI。我是一名学生,我也不熟悉C ++而不是Java。在显示如下的代码中,有一个名为QWidget的类*window的窗口对象引用,它没有包含在代码的开头。据我所知,所有包含的小部件都在QWidget(QSlider和QSpinBox)下。什么是QWidget的基类。 (如果QObject和QWidget之间有基类)?为什么可以在不包含它的情况下从QWidget创建对象?为什么whole object的{​​{1}}显示为窗口,如果其他Widget类在其下面(参见下图)。

来自C++-GUI-Programming-with-Qt-4-1st-ed ebook的图片

QWidget base class

4 个答案:

答案 0 :(得分:4)

QSlider继承自QAbstractSliderQWidget本身继承自QSlider。因此,QWidget的间接包含QSpinBox,允许您创建一个QWidget。与任何其他窗口小部件一样,QWidget *window也继承自first(people)$age

正如in the doc所说:

  

没有父窗口小部件的窗口小部件始终是一个独立窗口   (顶级小部件)。

所以head(people, 5)$age take(people, 5)$age 实际上创建了一个窗口,标题栏和所有。

答案 1 :(得分:2)

来自Qt documentation

  

小部件是用户界面的原子。 (...)小部件是   由其父级和前面的小部件剪裁。

     

未嵌入父窗口小部件的窗口小部件称为窗口。   (...)

     

没有父窗口小部件的窗口小部件始终是一个独立窗口   (顶级小部件)。

希望这有帮助。

答案 2 :(得分:0)

  

QWidget的基类是什么。

QWidget继承自QObject和QPaintDevice。

  

为什么可以在不包含它的情况下从QWidget创建对象?

我猜<QSlider>和/或<QSpinBox>包含<QWidget>。是的,为了示例,如果有明确的#include <QWidget>,它可能会“更清晰”,但显然没有必要。

  

为什么整个QWidget显示为窗口,如果其他Widget类在它下面。

很抱歉,但我不确定你在这里问的是什么。

答案 3 :(得分:0)

QWidget的基类是什么。 (如果QObject和QWidget之间有基类)?

我不知道。 QWidget是基本的GUI类。我的意思是所有其他GUI类必须从中派生出来。因此,层级链中的内容并不重要。

为什么可以在不包含QWidget的情况下从QWidget创建对象?

通过这个我认为你的意思是#include QWidget.h。 QSpinBox和QSlider派生自它,所以我假设它们的头文件包含QWidget.h。包含是传递性的。

为什么整个QWidget显示为窗口,如果其他Widget类在它下面。 这真的不清楚。如果一个窗口小部件不包含其他窗口小部件,它就没有任何意义。