赞
踩
最近一直在学习Qt,编程语言使用的是C++,我发现这样的组合既可以写逻辑算法,也可以很方便的写出漂亮的界面。更令我惊叹的是,用Qt编写的程序可以在几乎所有的Unix、Windows、MacOS、Android系统上编译运行。出于实践的目的,我就用Qt写了这个水果管理系统。那么Qt和C++究竟是什么关系呢?
Qt是一个功能非常完善的c++跨平台图形库,其实与其说图形库倒不如说它是一个与MFC类似的应用框架。Qt本身就是使用c++语言实现。
QT理论上是跨平台的,MFC只是windows下的架构。
QT是一个完全的C++程序开发框架,包含类库和跨平台国际化开发工具。QT API和开发工具对所有支持平台都是一致的,从而可以进行独立于平台的程序开发和配置。使得跨平台软件编程直观、简易和方便。
QT是一种c++语言的方言。
因为它要使用自己的预处理器处理代码后,才能用C++编译器编译代码。
qt基于c++语言实现,c++本身只是为开发人员提供了一种编程手段,而Qt正是利用了它实现了一个半成品的应用框架。c++语言自身实现非常复杂,比如多态、继承、虚函数等语言特性的实现就较为底层,只能由天才级的it人士完成。而Qt相对c++而言属于高层次的应用,普通的Qt开发人员做的应用程序相对Qt而言又高了一个层此。
qt里的类都是由c++写的,你用qt编程的时候和c++不同点在于:很大一部分和信号与槽有关的c++代码不用你自己来写,是由qt sdk提供的一个程序自动生成的。
总之无论qt自动生成的代码还是你写的调用qt的代码或者qt类库底层的代码都是c++。qt开源。
QT是一个高层的类库,OpenGL是底层的库。
如果相互调用的话,是QT调用OpenGL。
OpenGL只是负责画出来一个图像,可能会细节到设计出来具体哪一个像素怎么画出来的,至于其他的事情完全不管。
QT则会做更多的事情,比如画出一个完整的对话框,并且替你把对话框的一些点击事件、关闭事件处理一下。而且QT画东西的时候,它并不一定是自己直接画,多半会通过调用OpenGL等库来画出来。
用木头盖房子来打比方的话,OpenGL负责帮你把树种出来,保证木材是结实耐用的。而QT帮你把木材加工好,做成一个木门,保证木门能够正确地安装和使用。
你需要的就是把这个做好的木门安装到你的房子上。
C++中的类,接口在QT中是可以使用的,和在C++中一样
C++是一个语言,而Qt是一个图形界面库(GUI)
除去界面相关操作,实际的编程回归c++中来。
这个水果管理系统,可以永久存储水果的:商品编号、名称、单价、库存数量等信息,只要在主界面点击插入按钮,然后在二级界面输入相应的数据保存即可,点击删除按钮输入商品编号就可以删除相应水果的信息,同时点击修改按钮可以修改水果的信息。点击查询按钮会跳出二级界面,然后选择查新的依据和目标值,点击查询就可以以类似于excle表格的形式显示出查询结果。这个水果管理系统,可以给水果销售带来极大的方便,提高管理的效率。
部署过程参考:http://blog.csdn.net/csdn_lsd/article/details/78116081
QtCreator集成了QtDesigner,在QtDesigner里可以选择需要的控件,然后合理的分配布局,可以很方便的绘制出漂亮实用的界面。在水果管理系统中,为了清晰的显示每条记录,我先择了TableWidget控件来转载数据。具体的数据需要在C++代码里里面set。Qt的界面和逻辑代码关系就是这样若即若离。
- /*
- * 文件名:DBHelper.cpp
- * 功能:提供连接和断开Sqlite3的接口
- */
- #ifndef DBHELPER_H
- #define DBHELPER_H
- #include <QSqlDatabase>
-
- //单例类
- class DBHelper
- {
- public:
- static DBHelper *getInstance();
- void connectDatabase();
- void disconnectDatabase();
- private:
- static DBHelper *instance;
- DBHelper();
- QSqlDatabase db;
-
- };
-
- #endif // DBHELPER_H
- /*
- * 文件名:DBHelper.cpp
- * 功能:提供连接和断开Sqlite3的接口
- */
- #include "DBHelper.h"
- #include <QDebug>
- DBHelper *DBHelper::instance = NULL;
-
- DBHelper::DBHelper()
- {
- db = QSqlDatabase::addDatabase("QSQLITE");
- }
- void DBHelper::connectDatabase()
- {
- db.setDatabaseName("fruit.db");
- bool ret = db.open();
- if(ret){qDebug()<<"open db success";}
- else{qDebug()<<"open db failed";}
- }
-
- void DBHelper::disconnectDatabase()
- {
- db.close();
- db.removeDatabase("fruit.db");
- }
-
- DBHelper *DBHelper::getInstance()
- {
- if(instance == NULL)
- {
- instance = new DBHelper();
- }
- return instance;
- }
- /*
- * 文件名:fruitDao.h
- * 功能:操作数据库的抽象基类,用于派生出更多的数据库操作类型
- */
- #ifndef FRUITDAO_H
- #define FRUITDAO_H
- #include "Fruit.h"
- #include <vector>
- #include <QSqlQuery>
- using namespace std;
-
- class FruitDao
- {
- public:
- FruitDao();
- virtual QSqlQuery *selectFruitById(QSqlQuery *,int id) = 0;
- virtual QSqlQuery *selectFruitByName(QSqlQuery *,QString name) = 0;
- virtual QSqlQuery *selectFruitByPrice(QSqlQuery *,double price) = 0;
- virtual QSqlQuery *selectFruitByNum(QSqlQuery *,double num) = 0;
-
- virtual bool insertFruit(const Fruit &fruit) = 0;
- virtual bool deleteFruit(const QString &name) = 0;
- virtual bool updateFruit(const int &id,const Fruit &fruit) = 0;
- virtual ~FruitDao();
- //~FruitDao();
- //warning: deleting object of abstract class type 'FruitDao'
- //which has non-virtual destructor will cause undefined behaviour [-Wdelete-non-virtual-dtor] delete(fd);
-
- };
-
- #endif // FRUITDAO_H
- /*
- * 文件名:fruitDao.h
- * 功能:操作数据库的抽象基类,用于派生出更多的数据库操作类型
- */
- #include "FruitDao.h"
- #include <QDebug>
- FruitDao::FruitDao()
- {
-
- }
- FruitDao::~FruitDao()
- {
- qDebug()<<"虚析构";
- }
- create table if not exists tb_fruit(
- id integer primary key autoincrement,
- name text not null,
- price real not null,
- num real not null
- );
步骤
1、配置windeploy.exe环境变量
2、在QtCreator中编译出软件的release版
windeploy ***.exe
3、下载Enigma Virtual Box
问题大多是由不知道某个技术,或者说是某个知识点不知道造成的。每个人的情况不同。
在写逻辑上我没有碰到棘手的问题,绘制界面上也没有遇到问题。但是在怎么把后台数据和界面上的控件建立连接上,却让我费了不少劲。
但是问题总是要去解决的,目前我的办法是百度上找相关控件的使用案例,然后模仿别人的代码,找里面的接口方法,运用到自己的程序中。
虽然问题得到解决,但是发挥了太多的时间和精力,有点不敢情愿。
我仔细想想,主要问题出在没有去看Qt的帮助文档。Qt的帮助文档里有所有的类、方法、信号、槽的介绍和使用。但是就是因为太过全面,导致看帮助手册也是非常费时。
两者之间需要权衡一下,目前在看开发手册和帮助文档这块,我还是没有形成好的方法,但是我会努力去看,大家有什么好的方法或者建议可以留言讨论。
GitHub : git clone https://github.com/grahamitdev/FruitManageSystem.git
百度网盘: 链接:http://pan.baidu.com/s/1mhNkhgW 密码:rj0f
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。