最近一直在忙,忙工作,忙私活;也很久沒有寫博客了; 一、將標(biāo)題欄和狀態(tài)欄以及中央部件集成于一個(gè)類中 單獨(dú)作為一個(gè)類,提供標(biāo)題欄和狀態(tài)欄以及中央部件指針成員; class QBaseWidget : public QFrame { QVBoxLayout *m_pMainLayout; //主布局 QTitleBar *m_pTitleBar; //標(biāo)題欄 QWidget *m_pContentWidget; //內(nèi)容區(qū)域,中央部件 QStatuBar *m_pStatuBar; //狀態(tài)欄 } 代碼如上所示,當(dāng)然QTitleBar和QStatuBar都是自定義的類,需要自己處理,如增加最小化按鈕,最大化按鈕按鈕,關(guān)閉按鈕,鼠標(biāo)位置判斷以及窗口多動(dòng),這樣你可以做成你自己想要的任何標(biāo)題欄和狀態(tài)欄以及中央部件,m_pContentWidget成員變量只是保持一個(gè)指針而已,以后如果你要把你做的內(nèi)容窗口嵌入到該類中,只是賦值即可,m_pMainLayout就是類的主布局了;寫到這里,大家覺得是不是有點(diǎn)像QMainWindow類的處理過程了; 二、為標(biāo)題欄和狀態(tài)欄提供修改接口 在有些窗口中,可能不需要狀態(tài)欄,例如程序的關(guān)于對(duì)話框,因此這時(shí)就應(yīng)該提供外部接口供調(diào)用者使用,表示標(biāo)題欄和狀態(tài)按是否需要; QBaseWidget(bool bShowTitleBar,QWidget *pContentWidget,bool bShowStatuBar,QWidget *parent = 0); 三、為標(biāo)題欄按鈕提供修改接口 并不是所有的窗口都有最大化和最小化以及關(guān)閉按鈕,例如對(duì)話框窗口,就只有關(guān)閉按鈕了,那么最小化以及最大化按鈕當(dāng)然就不要了;所以需要提供外部接口給調(diào)用者使用: void setWidgetBtnShow(bool bMinBtnShow,bool bMaxBtnShow,bool bCloseBtnShow); 參數(shù)的含義依次表示是否顯示最小化按鈕,是否顯示最大化按鈕,是否顯示關(guān)閉按鈕. 四、將自己的內(nèi)容部件嵌入到QBaseWidget中 上述只是講解了怎么修改自己的外觀;當(dāng)然,最主要的還是要把自己的內(nèi)容部件潛入到其中,例如你在Qt Designer中設(shè)計(jì)了一個(gè)窗口,你想把這個(gè)窗口套在其中,則: QBaseWidget(bool bShowTitleBar,QWidget *pContentWidget,bool bShowStatuBar,QWidget *parent = 0); 只要將自己設(shè)計(jì)的內(nèi)容部件的指針賦值給pContentWidget即可,這樣就自然套上了統(tǒng)一的標(biāo)題欄和狀態(tài)欄以及中央部件樣式. 五、統(tǒng)一外觀設(shè)置 在整個(gè)項(xiàng)目中,當(dāng)然希望所有的窗口界面的色彩格調(diào)保持一致了,這時(shí)只要美化上述中所述的標(biāo)題欄,狀態(tài)欄以及中央部件即可,而且只要寫一處代碼即可哦. 六、程序示例 最后,給大家截圖看看實(shí)現(xiàn)效果,統(tǒng)一格式的標(biāo)題欄,狀態(tài)欄以及中央部件的格式;由于工程是用于實(shí)際項(xiàng)目中,所以這里只截取了用戶登錄對(duì)話框以及關(guān)于對(duì)話框界面,其他界面不提供,謝謝 七、界面設(shè)計(jì) 用戶只需要設(shè)計(jì)中央部件即可,其他的就不要了,如上圖中的用戶登錄對(duì)話框,用戶只需要在Qt Designer中設(shè)計(jì)用戶登錄對(duì)話框即可,然后嵌入其中即可,如下圖所示: 八、優(yōu)勢(shì) 1、統(tǒng)一的樣式格調(diào) |
|