Giúp giải thích một số vấn đề về class MainWindow trong QT

Các bác trả lời giúp e mấy thắc mắc sau với ạ:

  1. Trong file mainwindow.h, em thấy có 2 class MainWindow khác nhau. Điều này đúng không ạ? Và nếu đúng thì nhiệm vụ/ mục đích của 2 class cùng tên này là gì ?
  2. Trong C++. e nhớ là tên namespace phải là duy nhất. Vậy sao trong 2 file ui_mainwindow.hmainwindow.h đều có cùng 1 namespacce Ui và có chung class MainWindow, hơn nữa khi ctrl+click vào class MainWindow ở file .h thì nó nhảy về đúng cái class nằm trong namespace Ui của file Ui_mainwindow.h. Như vậy chẳng phải 2 file header cùng định nghĩa 1 namespace sao ?
  3. Ở file mainwindow.cpp có con trỏ ui (ui = new UI::MainWindow) được sinh ra khi constructor được gọi, cái con trỏ này nó làm nhiệm vụ gì ? trỏ tới đâu? quản lý cái gì ? Mà sao nó không truy xuất tới được các thuộc tính của lớp mainwindow? Còn con trỏ this thì lại truy xuất được tới các thuộc tính của mainwindow class ? this này nó đại diện cho cái gì ?

Mình có tham khảo link https://stackoverflow.com/questions/24855666/qt-ui-namespace
Nhưng đọc xong vẫn mông lung, tưởng chừng mờ mờ hiểu ra cái gì đó ^^!

Mọi người ai biết chỉ dùm mình với ạ. Thanks !

  1. Đúng, 2 class này khác nhau.
    Một class là ::Ui::MainWindow, 1 class là ::MainWindow. Nhìn vào namespace đủ biết thằng Ui:: là thuộc về giao diện. Thằng còn lại là code của bạn.

  2. Đúng, namespace là duy nhất. Nhưng 1 namespace có thể có nhiều con bên trong nó. Việc các phần tử như class, function, variables,… nằm trong cùng một namespace là điều bình thường. Ở đây thằng ::MainWindow nó nằm ở lớp ngoài cùng, không liên quan gì tới ::Ui::MainWindow. Namespace ::Ui là vùng tên được Qt compiler tự định nghĩa và generate, bạn không cần quan tâm gì tới nó cả.

  3. Lớp ::MainWindow này nó lấy ::Ui::MainWindow làm phần tử con, nó phải gọi trực tiếp this->ui->... thì mới truy cập được các thành phần bên trong của ui. Còn việc this gọi gì là do nó thừa kế lại QMainWindow, và các thành phần được preprocessor trong Q_OBJECT.

Bạn nên nắm chắc OOP cơ bản trong C++ (Hay bất kì ngôn ngữ OO nào khác) trước khi lao vô Qt nếu muốn làm việc tốt hơn.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?