Qt 統一樣式 結合良好設計原則

2021-10-02 17:09:56 字數 2240 閱讀 9181

以qdialog乙個常用的元件為例。

首先,我們建立乙個模板控制項:

並搭建需要的框架:

這裡我要達到的效果有:

然後看看較為重要的函式useframe,正是這個函式開啟了框架:

void map_dlg_templatedialog::

useframe

(qwidget *widget,

int w,

int h)

m_templateui-

>m_templatetitlebar-

>

setbuttonstyle

(titlebarbuttonflag::noflagiconandmaxminbutton)

; m_templateui-

>m_templatetitlebar-

>

settitleicon

(qicon

(":/icon/icon/world.png"))

; m_templateui-

>m_templatetitlebar-

>

settitlebartitle

(u8"標題欄"

, qt::aligncenter)

; m_templateui-

>m_templatetitlebar-

>

setdragable

(true);

this

->

setwindowflag

(qt::framelesswindowhint)

;connect

(m_templateui-

&qpushbutton::clicked,

this,;

connect

(m_templateui-

>m_cancelbutton,

&qpushbutton::clicked,

this

,&map_dlg_templatedialog::cancelhandle)

;}

**非常簡單,更多是特定需要的介面,核心只要呼叫了setupui,通過啟用ui檔案搭建的框架,並以qss渲染其中指定的部件。

/**

* @brief the map_dlg_templatedialog class

* 對話方塊模板類,可作為大部分對話方塊的父類;

* 提供了一套對話方塊的自定義框架,暫時包括:

* 1.自定義標題欄,具體api參見自定義標題欄標頭檔案

* 2.底部button box,提供「確定」,「取消」功能。

* 3.邊框樣式以及相關qss設定,詳情參見ui檔案的樣式。

* 用法:

* 生成qt的ui/**件,選擇qdialog父類;在生成的.**件中更改繼承父類為map_dlg_templatedialog;

* 在建構函式(或者合適的位置),呼叫map_dlg_templatedialog的useframe方法即可。

* 參考map_dlg_createproject介面

* 最後在工廠類中提供生成介面的函式,使用工廠類建立介面。

* @see map_dlg\map_dlg_createproject.h

*/

舉例:

其實這個思路本身,其實就是利用了多個ui的組合,把介面共有的部分提取出來搭建乙個ui框架檔案,特定邏輯則繼承這個父類,再寫自己的ui檔案。

(可能是qt預設生成乙個.h乙個.cpp乙個.ui就預設了這種組織形式,但檔案組織是自由的,只要弄清楚ui檔案的本質是什麼,也就是setupui這個函式的作用)

上面額外提到一點是工廠類,這是team裡面乙個成員提出的設計原則,所有介面的建立由專門的工廠類去負責(其實也就是把new dialog()這個放入乙個函式裡面!)。這點到底有沒有意義,我暫時持保留意見。

譯 統一樣式語言

本文講的是 譯 統一樣式語言,譯文出自 掘金翻譯計畫 譯者 zhangfe 校對者 jackgit,yifili09,sunshine940326,sunui 這簡直是乙個可怕的想法!但願他們學過 css 抽取關鍵 css 更智慧型的優化 打包管理 在非瀏覽器環境下的樣式 import from g...

IT外企那點兒事 5 像系統一樣公升級

it外企那點兒事 5 像系統一樣公升級 進行完入職培訓,便開啟了你在外企中的程式人生了,需要說明的是,此文章不僅限外企。如果待足夠長的時間,你將從程式設計師,高階程式設計師,team lead,一直到manager,甚至director。我們姑且巨集觀審視一下此過程,然後再品味乙個個細節。然而審視的...

如何讓文章像病毒式營銷一樣傳播?

這篇文章是源於4月18日下午的廣電總局勒令papi醬節目下線整改,要求去掉粗口低俗內容一事,此作者連夜將papi醬微博上的所有 看了一遍,將papi醬曾經說過的髒詞總結出來,統計做 再寫成文章發表出來,僅僅在百家24小時就收穫了十幾萬的閱讀量。這讓老麥想到了apple pay在今年2月28日凌晨5點...