this指的是真正的當前正在顯示的窗口
main函數:
Widget w是生成了一個主窗口,QT Designer是在這個主窗口里塞組件
w.show()用來展示這個主窗口
頭文件:
namespace Ui{class Widget;}中的class Widget和下面的class Widget不是一個東西
Ui::class Widget記錄的是在Qt Designer中的控件的位置大小布局等等信息
class Widget具體實現功能的
這里的兩個宏QT_BEGIN_NAMESPACE和QT_END_NAMESPACE估計就是給這個class Widget賦予其成員信息的,當然名字是可以修改的
源文件:
ui(new UI::Widget)就是給ui傳了一個父親窗口(UI::Widget是設計圖,Widget才是具體窗口),其他子窗口都是在父親窗口下的
在實際開發中可能遇到的問題:
解決方法:
要加上這樣一句話
此處的verticalLayout指的是你最大的那個布局(包含所有控件的布局,一般是垂直布局的),這樣寫的作用就是讓這個verticalLayout這個大布局隨著窗口大小的改變而改變,因為布局是會自動匹配當前窗口大小的。如果不加那這個布局的大小就不會變,這個大布局變了,其他小布局也會變。但關鍵是這個大布局得變!(這個大布局包含了所有的小布局)
要理解這個首先得明白Qt Designer中的Widget和你實際窗口的Widget不是一回事,Qt Designer中的Widget只是設計圖紙。或許verticalLayout可以跟著你Qt Designer中的Widget中的大小變化而變化,但是你Qt Designer中的Widget大小是不會變的,因為它只是圖紙,變的是實際窗口的Widget大小,所以才要加上這一句話,讓布局跟著實際窗口變化而變化。都是這樣子做Qt Designer中的Widget大小任然不變,變的是verticalLayout這個布局的大小(包含了里面的所有控件的大小和位置信息也變)。
(比較難以理解哈,自己看多幾次)
this指向的就是當前實實在在在顯示的窗口,這個this是會循環的,在之前講過,只要你的窗口發生變動就會變化