當前已經做好的exe,數據庫是連服務器的,但是頭像是存在本地的文件系統里面:
https://cloud.tsinghua.edu.cn/d/059ef6b1f9a149ce879b/files/?p=/translation.rar
建議
可能完善碼風的一點建議和做大作業過程中遇到的坑:
1. 盡可能不要在代碼中出現魔法值,即常量盡可能用const賦予其意義,同時可以復用。全局常量建議在cpp文件中定義,其他文件通過頭文件中的extern進行訪問。
2. 小心你的頭文件結構,如果相互包含可能導致bug。
3. Qt銷毀元素時是會把它的子元素一並銷毀的,所以我們並不需要太擔心new出來的對象如何delete的問題。update:界面中的元素不要隨意delete,手動delete可能在Qt內部刪的時候導致崩潰。
代碼結構
先擺一個數字,當前所有.cpp、.h文件(不包括ui_****.h)總大小:173KB
下面主要展示各對象中的數據成員及繼承關系,我並不建議你在沒有任何思考的情況下直接閱讀(除非你大作業做不完了)。
User : Id, Nickname, password, Introduction, Age, Gender, Score, Balabce
派生:Candidate, Author, Manager, Translator
Task : Stage, Name, Description, Content, Amount, Author(SubTask), Maneger(SubTask), Candidates, Translators(SubTask), RecruitManagerDDL, FinalDDL
SubTask:User, Task
AuthorTask(SubTask)
ManagerTask(SubTask)
TranslatorTaks(SubTask) : From, To, Local, Submit, Comment
Database
Message
以下界面相關,帶括號表示從中繼承而來。
GetInformation
Translation(MainWindow): Menu*, Content*, Status*
Menu(QMenuBar)
Content(QWidget) :
Index(Content) :
Login(Content, GetInformation) :
Register(Content, GetInformation) :
LeaderBoard(Content):
Personal(Content)
TaskList(Content)
NewTask(Content)
TaskInfo
MessageView
Status(QStatusBar)
這里用了一個多繼承,Login和Register有Centent和GetInformation兩個父類,感覺寫起來確實方便一些。但是都說多繼承盡可能少用,我也不是很懂這里有沒有增加耦合性,還是這么寫了。后期應該可以用Lambda表達式替代掉。
