Прежде всего, заголовочные файлы не содержат определения классов. Они содержат только объявления классов, которые позже будут определены в соответствующем файле. cpp. Они компилируются в библиотеки stati c и dynamici c, которые, вероятно, являются lQt5Widgets, когда вы собираете библиотеку с нуля или загружаете предварительно скомпилированные двоичные файлы. Затем это связано с вашей программой, так что все имена могут быть разрешены. Так что на самом деле это работает не потому, что определения находятся в <QBoxLayout>
, а потому, что <QBoxLayout>
содержит объявление для QHBoxLayout
и QVBoxLayout
. Следующий фрагмент кода из <qboxlayout.h>
показывает их объявление ..
113 class Q_WIDGETS_EXPORT QHBoxLayout : public QBoxLayout
114 {
115 Q_OBJECT
116 public:
117 QHBoxLayout();
118 explicit QHBoxLayout(QWidget *parent);
119 ~QHBoxLayout();
120
121
122 private:
123 Q_DISABLE_COPY(QHBoxLayout)
124 };
125
126 class Q_WIDGETS_EXPORT QVBoxLayout : public QBoxLayout
127 {
128 Q_OBJECT
129 public:
130 QVBoxLayout();
131 explicit QVBoxLayout(QWidget *parent);
132 ~QVBoxLayout();
133
134
135 private:
Это работает, потому что они объявлены в <QBoxLayout>
, и вы, вероятно, связываете его с правильной библиотекой также там, где находятся их определения.