Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt Ui namespace

Tags:

c++

qt

What is the significance of the namespace Ui that is auto-generated by Qt?

Are these two namespaces the same?

In the first one, which contains a forward declaration of the class MainWindow from ui_MainWindow.h why is it not declared as class Ui::MainWindow? How does the compiler know that MainWindow is coming from the auto-generated Ui header?

In MainWindow.h

namespace Ui {
class MainWindow; //MainWindow from ui_MainWindow.h
}

In ui_MainWindow.h

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui
like image 718
Quaxton Hale Avatar asked Jul 20 '14 22:07

Quaxton Hale


2 Answers

It is used to group your auto-generated windows in one name-space. It helps to differentiate between the ui class that is generated from designer ui file and the class that implements the functionality.

like image 54
etr Avatar answered Nov 03 '22 01:11

etr


What is the significance of the namespace Ui that is auto-generated by Qt?

So that it resides in its own "bubble" and will not conflict with any other similarly named class, like the one that you create explicitly. Sure, they could have make that it is being called differently and so on, but even then namespaces are good practice in C++ to deal with to avoid clashes.

Are these two namespaces the same?

Yes, of course, namespaces with the same name within the same parent namespace are always the same in a project.

I guess I meant why is there a namespace Ui created in Ui_MainWindow.h.

Well, wherever else would it be created, really? There needs to be some file where this code is generated, not polluting any existing source file with generated code on the fly. Whether it happens to be called the way it is, is just personal taste again.

And how does class MainWindow in the namespace Ui in MainWindow.h know it is a forward declaration of the MainWindow class in the Ui file rather than the one created by me.

Well, this has nothing to do with Qt, it is just C++ basics. It seems to me you do not get what namespaces are and how they are used. It will be "tagged" with the namespace, so the compiler will of course know which one it refers to. Now imagine this without namespace. It would be totally ambiguous for the compiler then.

like image 39
lpapp Avatar answered Nov 03 '22 00:11

lpapp