QT項目負責人必須掌握的Ui設計師功能——Promote to !

原文鏈接如下:

http://blog.chinaunix.net/uid-25223983-id-90838.html


作爲一個QT項目的負責人,你總是不得不經常面臨這樣的情況:

    你們的團隊接到了一個任務,然後你把這個任務細分爲具體的模塊,然後你的組員們順利的完成了你佈置的任務。他們做好了模塊,然後提交給你了。現在,輪到你把他們的模塊合併成一個程序了……

這網網是很困難的,原因是:

     1,  每個人所做的模塊都有自己的界面,你在總的程序中要設計和定義好什麼時候,在什麼位置,誰的模塊會生效?

     2,  不同人的模塊會有不同的功能和操作,你如何佈置與此操作對應的按鈕,這些按鈕和時出現,何時被激活?

     3,  怎麼讓他們的模塊和主程序完美的融合,某個按鈕的隱藏不會造成整個佈局混亂?

     4,  工程文件是混亂的麼?是不是分不清哪裏是誰做的?

      所有的答案,就在QT設計師裏,使用QT設計師的Promte to功能配合QT的強大信號和插巢功能,讓你的類輕鬆自由的進化成你想要的樣子,當然也可以進化成你的組員提交給你的模塊……

我們以一個具體的工程來講解:

       A同學負責製作一個顯示模塊,這個模塊是一個日曆(隨便定的,只是爲了演示方便)
       B同學負責製作一個統計模塊,這個模塊有一個計數器和一個數字輸入框(QspinBox

   你來把這兩個部分和在一起,不能影響佈局的基礎上儘量使界面美觀。

   首先是A同學的模塊,我們很快就可以做好:

   我們可以看到生成的工程是以Student_A的名字命名的,對應的類名,頭文件(.h),源文件(.cpp)以及窗體(.ui)文件均是以stua_widget來命名。表示這個類是繼承字Qwidget,由studentA負責開發。

      然後就是託控件了,也很簡單……

      我們可以加一個佈局(Qlayout),以適應拉伸或者壓縮。

       然後就成功了,編譯,把它提交給你的組長吧。

    同理可以製作StudentB的模塊:

    跟剛纔一樣,這裏不再贅述……

    做好了,是這個樣子的:  

     然後是主工程,由負責人CG創建:

      首先建好工程:

      然後是界面,可以使用一個QstackWidget以避免不同的模塊與對應按鈕之間互不干擾,一會還會在說……,是這個樣子:

      有人也許會問:啊?你放東西了麼?爲什麼我什麼也看不到?呵呵,如果你觀察的夠自己的話,就會發現右上角有一個向左右的箭頭:其實我不僅放了一個QstackWidget,我還爲這個Widget做了一個佈局。不信你看:


圖片

      這個StackWidget有兩頁,每個頁都有自己的Qwidget,這個是非常科學的。因爲所有的QT GUI類,包括窗體部件和QmainWindow都是直接或者間接的繼承自Qwidget而我們今天要做的就是讓這兩個Qwidget進化,進化爲StudentAStudentB製作的模塊——也就是這個帖子的重點了:

首先我們要把StudentAStudentB工作的成果添加到工程中來:

      打開這個工程所在的文件夾,將StudentAStudentB的工程(連文件夾一起拷貝過來):


      然後在工程文件中添加需要的文件, 除了main.cpp不用添加以外(因爲一個工程只能有一個main)其餘看你的需要,如果你需要在主工程中也能編輯StudentAStudentB的模塊可以把Ui也添加進來

(到時候CG工程在編譯的過程中會重新生成ui_StudentA.h  ui_StudentB.h,這是後話,不表……),於是就變成了這樣:

     我們可以看到,哪個文件,是誰寫的在我們的工程中一目瞭然,並且也可編輯,由於文件存在於工程文件中,所以Gcc在編譯的時候也會重新根據我們的更改來編譯這些文件。

     好了,終於到了今天最有趣的地方了,準備好享受編程的樂趣了麼?

讓我們的類進化吧!!!

第一步,選中pageone這個Qwidget,鼠標右鍵,promote to

 

第二步,填入信息:

Base class就選擇Qwidget

Promote to class要輸入StudentAStudentB在他們的頭文件(.h)文件中定義的類名(不要敲錯了哦!):

      最後是頭文件的位置:當然是Student_A文件夾下的stua_widget.h啊,因爲那個文件就在那裏呆着嘛(好像是廢話……):

總之就是這樣,先點Add按鈕,一個可進化類就做好了,選中它點promote就行了:

      哈哈,就這麼簡單,看看你原來是Qwidgetpage變成什麼了:

      並且你一編譯,就會奇蹟般的發現StudentA做的日曆已經乖乖的躺在你QstackWidgetpage裏啦:

      同理可以在QstackWidget中加入B同學的模塊,並且你可以在主工程中直接對AB兩位同學的模塊進行修改。你做的改動會被Gcc編譯器重新編譯。(這主要是你可以在他們的類中寫一些插巢,然後在你的類也就是cg_widget初始化的時候去綁定這些巢,這樣就可以向AB這兩個類發送消息完成類之間的通信了,哈哈……

      最後補充說點QstackWidget的頁面切換吧:

使用這個代碼可以在程序中去改變當前的頁:

      你可以在主面板上做一個按鈕,通過綁定信號和插巢來分頁來切換分頁。當然插巢中應該有的代碼,自然是上句啦,嘿嘿,好了,今天就說道這吧,好好利用這個功能,把大家的努力整合在一起,以更高效的進行開發,這個項目負責人應該掌握的,自己好好體會吧……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章