1. 程式人生 > >Qt之統一的UI介面格式基調,漂亮的UI介面

Qt之統一的UI介面格式基調,漂亮的UI介面

最近一直在忙,忙工作,忙私活;也很久沒有寫部落格了;
  今天主要談談Qt UI介面統一樣式(格式基調)的問題;例如在window系統上,幾乎所有的視窗都有標題欄和狀態列以及中央部件,而且每一個標題欄和狀態列以及中央部件樣式都保持一致的;但是在實際開發中我們又不想使用window系統自帶的標題欄和狀態列等,因此需要自定義標題欄和狀態列以及中央部件,同時保持專案中的所有視窗的標題欄和狀態列和中央部件的格式樣式一致,這樣在專案開發中,既可以保持擁有漂亮的UI介面,又能大大的提高開發效率,因為你不需要在每一個視窗中對標題欄和狀態列以及中央部件進行重複開發了,例如不需要對每一個視窗進行滑鼠移動判斷從而對視窗進行移動,使使用者更加專注於業務;下面談談具體怎樣實現:

一、將標題欄和狀態列以及中央部件集成於一個類中

  單獨作為一個類,提供標題欄和狀態列以及中央部件指標成員;

複製程式碼
class QBaseWidget : public QFrame
{
QVBoxLayout *m_pMainLayout;     //主佈局
QTitleBar *m_pTitleBar;         //標題欄
QWidget *m_pContentWidget;      //內容區域,中央部件
QStatuBar *m_pStatuBar;         //狀態列
}
複製程式碼

  程式碼如上所示,當然QTitleBar和QStatuBar都是自定義的類,需要自己處理,如增加最小化按鈕,最大化按鈕按鈕,關閉按鈕,滑鼠位置判斷以及視窗多動,這樣你可以做成你自己想要的任何標題欄和狀態列以及中央部件,m_pContentWidget成員變數只是保持一個指標而已,以後如果你要把你做的內容視窗嵌入到該類中,只是賦值即可,m_pMainLayout就是類的主佈局了;寫到這裡,大家覺得是不是有點像QMainWindow類的處理過程了;

二、為標題欄和狀態列提供修改介面

  在有些視窗中,可能不需要狀態列,例如程式的關於對話方塊,因此這時就應該提供外部介面供呼叫者使用,表示標題欄和狀態按是否需要;

QBaseWidget(bool bShowTitleBar,QWidget *pContentWidget,bool bShowStatuBar,QWidget *parent = 0);

三、為標題欄按鈕提供修改介面

  並不是所有的視窗都有最大化和最小化以及關閉按鈕,例如對話方塊視窗,就只有關閉按鈕了,那麼最小化以及最大化按鈕當然就不要了;所以需要提供外部介面給呼叫者使用:

void setWidgetBtnShow(bool
bMinBtnShow,bool bMaxBtnShow,bool bCloseBtnShow);

  引數的含義依次表示是否顯示最小化按鈕,是否顯示最大化按鈕,是否顯示關閉按鈕.

四、將自己的內容部件嵌入到QBaseWidget中

  上述只是講解了怎麼修改自己的外觀;當然,最主要的還是要把自己的內容部件潛入到其中,例如你在Qt Designer中設計了一個視窗,你想把這個視窗套在其中,則:

QBaseWidget(bool bShowTitleBar,QWidget *pContentWidget,bool bShowStatuBar,QWidget *parent = 0);

  只要將自己設計的內容部件的指標賦值給pContentWidget即可,這樣就自然套上了統一的標題欄和狀態列以及中央部件樣式.

五、統一外觀設定

  在整個專案中,當然希望所有的視窗介面的色彩格調保持一致了,這時只要美化上述中所述的標題欄,狀態列以及中央部件即可,而且只要寫一處程式碼即可哦.

六、程式示例

  最後,給大家截圖看看實現效果,統一格式的標題欄,狀態列以及中央部件的格式;由於工程是用於實際專案中,所以這裡只截取了使用者登入對話方塊以及關於對話方塊介面,其他介面不提供,謝謝

七、介面設計

  使用者只需要設計中央部件即可,其他的就不要了,如上圖中的使用者登入對話方塊,使用者只需要在Qt Designer中設計使用者登入對話方塊即可,然後嵌入其中即可,如下圖所示:

八、優勢

1、統一的樣式格調
2、漂亮的UI介面
3、大大節省開發時間


FROM: http://www.cnblogs.com/appsucc/archive/2012/11/05/2754767.html

相關推薦

Qt統一UI介面格式基調漂亮UI介面

最近一直在忙,忙工作,忙私活;也很久沒有寫部落格了;   今天主要談談Qt UI介面統一樣式(格式基調)的問題;例如在window系統上,幾乎所有的視窗都有標題欄和狀態列以及中央部件,而且每一個標題欄和狀態列以及中央部件樣式都保持一致的;但是在實際開發中我們又不想使用w

ajax傳送json格式資料呼叫restful介面

ajax傳送json格式資料,關鍵是指定contentType,data要是json格式 如果是restful介面,把type改成對應的post(增)、delete(刪)、put(改)、get(查)即

QTlineedit使用(輸入輸出顯示時間)

1、lineedit輸入、輸出輸入:QString a = ui->lineEdit->text();輸出:ui->lineEdit->setText("Qt");2、linee

介面的概述特點以及介面和抽象類的區別

第1章 介面 1.1 介面的概述 介面是功能的集合,同樣可看做是一種資料型別,是比抽象類更為抽象的”類”。 介面只描述所應該具備的方法,並沒有具體實現,具體的實現由介面的實現類(相當於介面的子類)來完成。這樣將功能的定義與實現分離,優化了程式設計。 1.2 介面的格式&使用 1.

解決介面呼叫黑洞esblink自動介面管理平臺

ESP主要功能: 1, 自動註冊,介面服務時,自動向指定的平臺,註冊上報介面服務資訊。並支援管理與修改。a) 自動註冊到管理平臺 b) 註冊的介面包含,主機資訊,介面服務資訊,介面方法資訊 c) 註冊後效果 d) 註冊後的介面可以管理e) 允許同時註冊多個相同的介面服務f) 如果不同功能

使用 Qt Designer建立前端介面,通過VS Code將Qt Designer建立好的.ui轉換為.py最後使用PyQt5實現點選按鈕介面發生跳轉

簡單的提一下PyQt5,Qt Designer的安裝 python 版本:3.6.2 使用pip安裝: pip3 install PyQt5 之後通過安裝PyQt5-tools,會自動安裝Qt Designer pip install PyQt

Qt自定義搜索框——QLineEdit裏增加一個Layout還不影響正常輸入文字(好像是一種比較通吃的方法)

too 步驟 set box 文本 csdn sub void 鼠標 簡述 關於搜索框,大家都經常接觸。例如:瀏覽器搜索、Windows資源管理器搜索等。 當然,這些對於Qt實現來說毫無壓力,只要思路清晰,分分鐘搞定。 方案一:調用QLineEdit現

QT初體驗1:如何學習QT個人淺見以及如何讀取文本文件在調試信息中輸出。

沒有 c++教程 最簡 將不 ror 聽說 講解 知識點 括號 2017年11月初,隨著工作崗位的調動,我轉到了研發崗,開始了漫漫程序員的成長之路。首先介紹下個人知識儲備,大一學習過C語言,沒有工程經驗,所學是為了期末考試+2級考試,考完在大學+碩士期間沒有用到編程。 來到

QTQSignalMapper(可以理解為轉發器多個按鈕綁定到一個Edit上且能分辨。每個單獨連接的話反而麻煩)

this 不同的 lan each b2c etc gpo 知識點 span QT之QSignalMapper QT之QSignalMapper 簡述 效果圖 上代碼 相關知識點文章 結尾 簡述 QSign

面向物件設計原則實踐:五.迪米特原則介面隔離原則

六、迪米特(第三者互動)原則 1. 定義 每一個軟體單位對其他的單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟體單位。   2. 分析 1) 迪米特法則就是指一個軟體實體應當儘可能少的與其他實體發生相互作用。 這樣,當一個模組修改時,就會盡量少的影響其他的

C# 解決子執行緒不能操作主執行緒UI介面)問題涉及到多執行緒的概念。

1、在預設情況下,C#不准許在一個執行緒中直接訪問或操作另一執行緒中建立的控制元件,這是因為訪問windows窗體控制元件本質上是不安全的。 2、執行緒之間是可以同時執行的,那麼如果有兩個或多個執行緒同時操作某一控制元件的某狀態,嘗試將一個控制元件變為自己需要的狀態時, 執行緒的死鎖就可能發生。

mllib實踐(二)LinearRegression實踐(DataFrame方式普通標籤格式轉DataFrame)(整合網際網路上多個例項)

package mllib; import org.apache.spark.{ SparkConf, SparkContext } import org.apache.spark.ml.linalg.Vectors import org.apache.spark.mllib.regress

大資料scala(二) --- 對映元組簡單類內部類物件ObjectIdea中安裝scala外掛trait特質[介面]包和包的匯入

一、對映<Map> ----------------------------------------------------- 1.建立一個不可變的對映Map<k,v> ==> Map(k -> v) scala> val map

Java介面自動化測試「Mock介面平臺」讓你的自動化更提前

前言:目前Mock技術已經比較成熟,在日常的工作中Mock也可以給我們帶來很大的遍歷,本篇文章將會使用Moco框架,一步一步搭建一套Mock Server,使得介面的自動化測試更加的提前,也能夠使得前後端分離。 共識與痛點 目前,在軟體行業內,大家已經達成的共識就是,測試

QT介面實現技巧

一、主介面 1、視窗 最小化 最大化 關閉按鈕、顯示狀態自定義 setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要關閉按鈕 setWindowFlag

android自定義底部Tab導航UI專案整體介面框架

android自定義底部Tab導航UI,專案整體介面框架 共享一個自己在開發過程中搭建的android專案介面框架,便於提高開發效率。 主要功能 1.使用Button自定義底部Tab和Title 2.點選底部Tab後使用Fragment切換頁面 3.主頁使用ViewPager滾動

QT——如何在不同執行緒中對同一個UI介面進行操作

最近在做一個介面,這個介面的功能有兩個: (1)點選開始按鈕,進入迴圈,等待裝置插入; (2)點選停止按鈕,中止等待過程。 對於“開始”按鈕,很自然的就寫了個while,在迴圈裡等待裝置插入。但是這就出現一個問題:這個執行緒就直接陷進了while裡,就是說點選“取消”沒

qt實現一個登陸介面-------------------qtmysql增、刪、改、查、基本操作。

https://www.cnblogs.com/baimt/p/5688517.html安裝的MySQL的的步驟可以參考該博主的文章。 專案描述:實現一個登入介面,登入成功後切換到另一個介面。 登入介面實現的功能有: 1. qt連線mysql建立表.2。註冊賬號,往mysql表裡面新增賬

Qt 工程中處理Alt+F4鍵關閉當前頂層介面的問題

可以單獨寫一個事件過濾類,然後需要遮蔽Alt+F4鍵的介面,新增事件過濾到這個類上。 class Handler : public QObject { Q_OBJECT public: explicit Handler(QObject *parent = 0); stat

springboot全域性異常處理(包含404錯誤處理) 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址)

個人整理參考文件: 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址) 三:SpringBoot全域性異常處理(備用地址) 四:sprin