天天看点

c++/qt命名空间分析

c语言防止标识符同名冲突的方式:

  1. 函数写在不同.c文件内

c++用命名空间来进一步防止同名冲突的3种方式:

  1. 函数写在不同.c文件内
  2. 不同的类里
  3. 写在不同的命名空间namespace里

命名空间定义:

class MainWindow;  //命名空间内可以放变量,函数,结构体,类等等
           
}
           

外部使用MainWindow类两种方式:

  1. Ui::MainWindow方式。
  2. 在使用者源码文件开头,using namespace Ui;,这样就可以直接使用该命名空间 Ui 中的内容了,MainWindow m;比如使用c++自带标准库(这些库默认被开发者写在命名空间std内),则在编程开头就写一句,using namespace std;这样就可以直接使用库里的类了。

qt中,默认建立的窗口应用程序,主界面是MainWindow类,同时默认继承了两个类(c++支持多继承,java等语言不支持)。

c++/qt命名空间分析

Ui_MainWindow类负责界面的创建(比如拖拽了一个按钮,在这里面new反映出来,这个是qt自动生成的),这个类自动被写在了Ui命名空间里,手动修改了,下次还是自动被写进去。

namespace Ui {
           
class MainWindow: public Ui_MainWindow {};  //这里是把MainWindow类写在了Ui命名空间里
           
} // namespace Ui
           

QMainWindow类负责界面的事件响应和处理(比如鼠标点击事件等)

class MainWindow;  //这里还是把MainWindow类写在了Ui命名空间里,因为不支持一个类属于两个命名空间,否则会报错
           
}
           
class MainWindow : public QMainWindow
           

{

......

}

提醒:一个类在继承的时候只能写在某个命名空间里,在另外一个地方继承时,还是只能写在当初那个命名空间里(即一个类不能同时出现在两个命名空间内),否则报错。

qt中继承的界面类会自动生成然后继承给MainWindow,且自动写在Ui命名空间里,因此多个应用程序想包含在一个工程里(大家都在Ui命名空间内),因为外部仅仅修改一下命名空间名字,但是下次又会自动生成为同名命名空间内,就会造成类名冲突的(默认主界面类名都是MainWindow,除非自己一个个修改,那就可以)。

继续阅读