[英]Include C++ header file
目前,我正在学习 C++ GUI--Qt,我对头文件感到困惑。
例如,我想在我的构造函数中使用QHBoxLayout
来管理布局。 QHBoxLayout
和QVBoxLayout
继承自QBoxLayout
。因此, QBoxLayout 头文件不应包含有关QHBoxLayout
或QVBoxLayout
定义。但它意外地正常工作。
所以我想这可能是 Qt 的一个特性,或者它适用于原生 C++ 语言吗?
#include "dialog.h"
#include <QBoxLayout>
Dialog::Dialog(int tempCelsius, QWidget *parent)
: QDialog(parent)
{
QHBoxLayout *mainLayout = new QHBoxLayout();
QVBoxLayout *leftLayout = new QVBoxLayout();
QVBoxLayout *rightLayout = new QVBoxLayout();
celsiusGroupBox = new QGroupBox(this);
fahrenheitGroupBox = new QGroupBox(this);
celsiusDia = new QDial(celsiusGroupBox);
fahrenheitDia = new QDial(fahrenheitGroupBox);
celsiusLDNumber = new QLCDNumber(celsiusGroupBox);
fahrenheitLDNumber = new QLCDNumber(fahrenheitGroupBox);
celsiusGroupBox->setTitle("Celsius");
fahrenheitGroupBox->setTitle("Fahrenheit");
leftLayout->addWidget(celsiusDia);
leftLayout->addWidget(celsiusLDNumber);
celsiusGroupBox->setLayout(leftLayout);
rightLayout->addWidget(fahrenheitDia);
rightLayout->addWidget(fahrenheitLDNumber);
fahrenheitGroupBox->setLayout(rightLayout);
celsiusGroupBox->setLayout(leftLayout);
mainLayout->addWidget(celsiusGroupBox);
mainLayout->addWidget(fahrenheitGroupBox);
setLayout(mainLayout);
}
实际上, QBoxLayout
在其中定义了所有三个类。 Qt 这样做,afaik,以减少包含的数量。 这在 C++ 中很常见,因为非常小的类只与它们的父类放在一起。 QHBoxLayout
和QVBoxLayout
在它们的构造函数/析构函数中都只是“特殊的”。 你可以打开头文件的实现看看。 (注意<QBoxLayout>
只包含<qboxlayout.h>
首先,头文件不包含类的定义。 它们只包含类的声明,稍后在相应的 .cpp 文件中定义。 当您从头开始构建库或下载预编译的二进制文件时,这些被编译成静态和动态库,可能是 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>
中声明的,并且您可能正在将它与正确的库链接起来,也可以在它们的定义所在的位置找到它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.