#include <QXXX> 还是 class QXXX

Qt 里经常见 #include <QXXX>class QXXX。前者是包含头文件,头文件中一般来说包含了 QXXX 类的定义,编译代码时预处理器要做 include 头文件的步骤;后者是类的前置声明,如果当前代码文件根本用不到 QXXX 的接口,只需要知道有 QXXX 这个类的存在,那么前置声明该类即可,编译速度也能得到提升。举两个示例:

  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
class QLabel;       // 前置声明
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QLabel *mLabel;
};
#endif // MAINWINDOW_H
  • mainwindow.cpp
#include "mainwindow.h"
#include <QLabel>        // 包含头文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),
    , mLabel(new QLabel)
{
    mLabel->setParent(this);
    mLabel->setText("hello world");
}

MainWindow::~MainWindow()
{
}