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

本文详细解析了一个简单Qt项目中的mainwindow.h和cpp文件内容,重点介绍了声明与定义的区别,以及如何在不同文件中正确使用这些概念。
部署运行你感兴趣的模型镜像

这个问题很好,一个最简单的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

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

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值