最近初學c++中的qt,寫了一個超簡單的幼兒教育輔助系統,主要實現的功能有:3級菜單,可以用來練習加減乘除法,難度設置,題量設置。
最終效果如下:
一個29M的安裝器。
開始菜單和桌面均生成了快捷方式。
圖片是我最喜歡的畫師的畫,這裏僅僅用於個人學習,如果放出可能涉及侵權,所以不顯示了。
代碼的層次結構圖:
其中ChildrenEducationSystem.cpp是主函數,ChildrenEducationSystem.cpp是主窗口。Common.cpp是一個共有類。(最初這整個功能是用c語言寫的,後來用c++進行了重構,所以將原來的函數大部分放在Common類中以靜態變量的形式存儲)LevelAndNum是題量和難度設置窗口,SubMenu是子菜單窗口。
我在這次寫代碼中遇到的坑:
1.connect函數的使用:
connect的一般方法:
connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
這個方法有一點不好,那就是SIGNAL和SLOT中的信號和曹的名稱都被當做了字符串來處理,所以即使寫錯了或者沒連上,也不會報錯。
qt5&c++11的環境下,可以使用更方便的“引用”以及“lamda表達式”
引用:
connect(ui->Btn, QPushButton::clicked,this,MyClass::Operation);
lamda表達式:
connect(ui->Btn, QPushButton::clicked,this
[=](){
/* do something.. 這裏一般用emit來發射信號*/
});
對於所有的方法:
這個sender(也就是connect函數的第一個參數)必須是一個已經分配了內存且實例化之後的對象,如果沒有實例化,則無法使用connect完成綁定!!
2.如果使用了qtDesigner,當你修改了ui後卻發現編譯器(我這裏用到vs)中無法顯示時,可以在代碼目錄的HeaderFile > 添加 >現有項,在Debug目錄下的uic菜單中,找到你需要的ui_xxx.h,引入進來,這時候就能顯示出你修改後的控件名字了。
這個其實並不影響你寫代碼,也即是說,即使你的編譯器提示錯誤,但是正常編譯依舊是通過的。
3.發佈時在桌面創建快捷方式:
qt如何打包安裝可以看 這個博客。這裏使用的是Engima Virtual Box,安裝包比較大。個人傾向於使用qt installer,可以看 這篇博客。
在qt installer中設置桌面和開始菜單快捷鍵就是要在.qs文件中寫下如下代碼:
Component.prototype.createOperations = function()
{
// call default implementation to actually install README.txt!
component.createOperations();
if (systemInfo.productType === "windows") {
var userProfile = installer.environmentVariable("USERPROFILE");
installer.setValue("UserProfile", userProfile);
component.addOperation("CreateShortcut", "@TargetDir@/幼兒教育輔助系統.exe", "@UserProfile@\\Desktop\\幼兒教育輔助系統.lnk");
component.addOperation("CreateShortcut", "@TargetDir@/幼兒教育輔助系統.exe", "@StartMenuDir@/幼兒教育輔助系統.lnk",
"workingDirectory=@TargetDir@", "iconPath=%SystemRoot%/system32/SHELL32.dll",
"iconId=2", "description=Open README file");
}
}
以上。若有需要源代碼可留下評論qq,我郵箱私發給你。