C/C++幼儿教育辅助系统

最近初学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,我邮箱私发给你。

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