關於Qt的UI的一點理解

2021-08-28 03:54:29 字數 1258 閱讀 3966

許久不用qt,突然對qt的ui程式設計模式有些不解,概念上有些混亂,一番查詢之後,基本又搞明白了,記錄一下。

使用qt designer可以視覺化布局你的窗體和元件,這個布局檔案可以直接生成乙個ui類,供控制項使用。但是在**中,見到一句ui.setupui(this),讓我疑惑了,究竟最終彈出的視窗是這個ui類,還是qwidget或qmainwindow,這個setupui又是幹什麼的,從引數看是把兩者繫結了一起。

通過**,我們看看乙個普通的窗體包含哪些東西,qwidget示例,看標頭檔案

class qtdemo : public qwidget

;

1)乙個使用者定義的qtdemo類,繼承於qwidget

2)qtdemo中,含有乙個ui檔案生成的物件例項ui::qtdemoclass ui

從這裡,我們可以想到我們的控制項物件是通過包含乙個ui物件來訪問控制我們在布局檔案中新增的元件資源的,比如在qt designer中,為布局加乙個按鈕物件,可以在qtdemo中,以如下方式訪問,達到禁用按鈕的效果

qtdemo::qtdemo(qwidget *parent)

: qwidget(parent)

從這裡,我們可能會想,ui物件包含按鈕元件,qtdemo是主視窗本身,他倆是協作關係,那如果不setupui又會怎樣呢?從生成的setupui原始碼可以更好的理解他們之間的關係,上述說法還是有問題的。

void setupui(qwidget *qtdemoclass)

// setupui

看ui物件setupui的實現,我們發現雖然ui物件包含了乙個pushbutton物件指標,但真正生成按鈕並進行相關設定卻是在setupui中,且引用了qtdemo作為父物件。即是說,其實這個pushbutton是屬於qtdemo的,那為什麼要走ui中控制生成和設定呢?這個就是ui的真正作用了。

ui是乙個布局物件,他是用來控制介面布局和元件分配的,但ui物件本身並不是,也不包含任何窗體實體(包括在ui上面布局的控制項實體),他只是控制使用他的窗體及其控制項的行為表現,類似於為窗體定製了一件衣服,但是要做這件衣服,穿這件衣服,還是要乙個人實體參與進來才行。

這樣的話,所有關於介面的元素、配置、布局,便從主體中抽離出來,任何窗體物件想使用這樣的ui,包含乙個ui物件例項,然後setupui一下,把自己傳進去就好了。

所以,setupui的本質,便可以理解為真正例項化ui物件的過程。

Qt中QMutex的一點理解

在qt的多執行緒控制中,互斥量的訪問最簡單的控制是新增乙個mutex鎖,對乙個函式或者變數鎖定。一直不理解qmutex中的鎖是如何執行的,或者說如何利用這個鎖將變數進行鎖定。官方例項是這樣的 1 qmutex mutex 2 int number 6 34 void method1 5 11 12 ...

關於malloc的一點理解

在函式中使用malloc,如果是大的記憶體分配,而且malloc與free的次數也不是特別頻繁,使用malloc與free是比較合適的,但是如果記憶體分配比較小,而且次數特別頻繁,那麼使用malloc與free就有些不太合適了。因為過多的malloc與free容易造成記憶體碎片,致使可使用的堆記憶體...

關於HTTPS的一點理解

通訊使用明文 不加密 內容可能會被竊聽。不驗證通訊方的身份,因此有可能遭遇偽裝。無法證明報文的完整性,所以有可能已經遭到篡改。https http 認證 加密 完整性保護 https是與ssl 安全套接層 組合使用的http協議 http secure 使用ssl之後,請求則變成先和ssl通訊,ss...