01/10/2018, 14:27
Giúp mình giải thích một số vấn đề trong QT với
Các bác trả lời giúp e mấy thắc mắc sau với ạ:
- 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ì ?
- Trong C++. e nhớ là tên
namespace
phải là duy nhất. Vậy sao trong 2 fileui_mainwindow.h
vàmainwindow.h
đều có cùng 1namespacce Ui
và có chung classMainWindow
, hơn nữa khictrl+click
vào classMainWindow
ở file .h thì nó nhảy về đúng cái class nằm trongnamespace Ui
của fileUi_mainwindow.h
. Như vậy chẳng phải 2 file header cùng định nghĩa 1 namespace sao ? - Ở file
mainwindow.cpp
có con trỏui (ui = new UI::MainWindow)
được sinh ra khiconstructor
đượ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ớpmainwindow
? Còn con trỏthis
thì lại truy xuất được tới các thuộc tính củamainwindow 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 nung, 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 !
Bài liên quan
Đú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ằngUi::
là thuộc về giao diện. Thằng còn lại là code của bạn.Đú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ả.Lớp
::MainWindow
này nó lấy::Ui::MainWindow
làm phần tử con, nó phải gọi trực tiếpthis->ui->...
thì mới truy cập được các thành phần bên trong củaui
. Còn việcthis
gọi gì là do nó thừa kế lạiQMainWindow
, và các thành phần được preprocessor trongQ_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.