原文鏈接如下:
http://blog.chinaunix.net/uid-25223983-id-90838.html
你們的團隊接到了一個任務,然後你把這個任務細分爲具體的模塊,然後你的組員們順利的完成了你佈置的任務。他們做好了模塊,然後提交給你了。現在,輪到你把他們的模塊合併成一個程序了……
這網網是很困難的,原因是:
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進化,進化爲StudentA和StudentB製作的模塊——也就是這個帖子的重點了:
首先我們要把StudentA和StudentB工作的成果添加到工程中來:
打開這個工程所在的文件夾,將StudentA和StudentB的工程(連文件夾一起拷貝過來):
然後在工程文件中添加需要的文件, 除了main.cpp不用添加以外(因爲一個工程只能有一個main)其餘看你的需要,如果你需要在主工程中也能編輯StudentA和StudentB的模塊可以把Ui也添加進來
(到時候CG工程在編譯的過程中會重新生成ui_StudentA.h和 ui_StudentB.h,這是後話,不表……),於是就變成了這樣:
我們可以看到,哪個文件,是誰寫的在我們的工程中一目瞭然,並且也可編輯,由於文件存在於工程文件中,所以Gcc在編譯的時候也會重新根據我們的更改來編譯這些文件。
好了,終於到了今天最有趣的地方了,準備好享受編程的樂趣了麼?
讓我們的類進化吧!!!
第一步,選中pageone這個Qwidget,鼠標右鍵,promote to:
第二步,填入信息:
Base class就選擇Qwidget
Promote to class要輸入StudentA和StudentB在他們的頭文件(.h)文件中定義的類名(不要敲錯了哦!):
最後是頭文件的位置:當然是Student_A文件夾下的stua_widget.h啊,因爲那個文件就在那裏呆着嘛(好像是廢話……):
總之就是這樣,先點Add按鈕,一個可進化類就做好了,選中它點promote就行了:
哈哈,就這麼簡單,看看你原來是Qwidget的page變成什麼了:
並且你一編譯,就會奇蹟般的發現StudentA做的日曆已經乖乖的躺在你QstackWidget的page裏啦:
同理可以在QstackWidget中加入B同學的模塊,並且你可以在主工程中直接對A,B兩位同學的模塊進行修改。你做的改動會被Gcc編譯器重新編譯。(這主要是你可以在他們的類中寫一些插巢,然後在你的類也就是cg_widget初始化的時候去綁定這些巢,這樣就可以向A,B這兩個類發送消息完成類之間的通信了,哈哈……
最後補充說點QstackWidget的頁面切換吧:
使用這個代碼可以在程序中去改變當前的頁:
你可以在主面板上做一個按鈕,通過綁定信號和插巢來分頁來切換分頁。當然插巢中應該有的代碼,自然是上句啦,嘿嘿,好了,今天就說道這吧,好好利用這個功能,把大家的努力整合在一起,以更高效的進行開發,這個項目負責人應該掌握的,自己好好體會吧……