Qt头文件引入两个namespace Ui的解释

6 篇文章 0 订阅

这个问题很好,一个最简单的Qt项目中有4个文件,我们来看看mainwindow.h和cpp的代码:

1.mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//这句话的意思,先声明一个在Ui命名空间的名为MainWindow的未定义的的类,现在只是一个声明而已
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;//使用了刚才在Ui命名空间定义的类
};

#endif // MAINWINDOW_H

2.mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDragEnterEvent>
#include <QUrl>
#include <QFile>
#include <QTextStream>
#include <QMimeData>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)//此处也用了一个Ui
{
    ui->setupUi(this);
    setAcceptDrops(true);
}

MainWindow::~MainWindow()
{
    delete ui;
}

解释:.cpp文件同时引入了两个头文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

而且它们里面都有命名空间Ui,类名也相同,但是这两者有重大区别,一个是声明,一个是定义!!!!!

1.mainwindow.cpp中引入"mainwindow.h中"中MainWindow是声明,如下:
namespace Ui {
class MainWindow;
}

2.mainwindow.cpp中引入的"ui_mainwindow.h"中MainWindow是定义,如下:
namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

两个命名空间虽然同名,而且类名也相同,但是一个是声明,一个是定义,可以有无数个声明,但是只能有一个定义,所以编译不会报错!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值