Qt数据库应用3-数据打印到pdf

Qt数据库应用3-数据打印到pdf,第1张

自从数据可以导出到xls,又有客户提出了不同的需求,比如既然可以将数据导出到xls,那是否可以导出到pdf文件呢?因为xls打开以后用户可以修改数据造假之类的,而pdf默认是不可编辑的,除非借助专业的工具,所以如果想要限定用户导出数据不能被更改,那导出pdf是最佳选择。写程序往往都是这样,一步步慢慢增加,随着用户需求的增加,程序量也越来越多,轮子组件也越来越多。往往客户提需求的时候,一定要认真聆听,尤其是一线用户,实际使用的用户,尽管有些不合理的需求,但是能满足就尽量满足,毕竟客户就是上帝。

在Qt中要导出到pdf必须要用到qprinter类,相当于这些数据是打印到pdf的,所以确切点是叫打印到pdf文件,而不是导出数据到pdf,格式这块由于采用的是打印,所以需要用html嵌套table表格的形式来打印,支持的格式就有限了,一般可以设置字体大小、颜色、边框、对齐等,尽管是html,但是也是支持有限的html格式,这点要特别注意。现在的qt版本貌似单独将pdf提炼出来成了独立的模块,功能更强大。

结构体支持的参数:

1、使用QDataStream进行二进制数据读写。

2、read binary data from a stream。

3、在代码中使用硬编码指定流的版本号。

4、在文件头写入一个简短的幻数字符串和一个版本数字,来用于将来扩展。

5、可以以下面这种方式来读取。

6、使用事务来完成不完整的数据读取。

这里以学生信息的录入与读取来作为演示,主要目的是演示数据库的 *** 作,至于数据的显示等不在演示范围内,请您自行研究。

首先,在Qt中建立一个图形界面的程序项目。

然后,我们在命令行下用sqlite命令创建了数据库 C:\StudentInfo\sutdentdata.db,并且建立了一个数据库表student,该表有四个字段ID、Name、Sex、Age,未向表中添加任何数据。

关于sqlite的简单使用,可以参考我们的另一篇经验。

2SQLite的简单使用方法

在读写SQLite数据库中,我们最主要用到的是QSqlDatabase类及QSqlQuery类,前者负责创建数据库连接并打开数据库,后者负责执行查询 *** 作。实际上前者也可以进行查询 *** 作并将结果返回给QSqlQuery对象,但是Qt并不建议这么做。

在干活前,依然是先看看Assitant,这是培养独立解决问题的一个好习惯。

好,下面给 录入 按钮的点击事件编写代码。关于如何给按钮的某一事件进行编码,可以参考我们另一篇经验。

首先在.pro文件中加上sql,然后别忘了#include <QSqlDatabase>以及#include <QSqlQuery>。

好了,下面在录入按钮的槽中加入如下代码:

QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE","wconntosqlite")

mydb.setDatabaseName("c:\\StudentInfo\\studentdata.db")

if(mydb.open())

{

QSqlQuery query(mydb)

QString sqlstr="insert into student (ID,Name,Sex,Age) values ('"

+ui->le_id->text()+"','"

+ui->le_name->text()+"','"

+ui->le_sex->text()+"',"

+ui->le_age->text()+")"

bool isok=query.exec(sqlstr)

if(isok)

qDebug()<<"数据写入成功"

}

上面我们先调用了QSqlDatabase的静态函数addDatabase创建了一个名为wconntosqlite的连接。然后给其传递数据库名称。

如果数据库打开成功,就创建一个关联的QSqlQuery对象,最后由QSqlQuery来执行插入数据工作。

特别注意:QSqlQuery对象的创建必须在mydb open成功以后才行,否则会出错。

我们来看看效果如何。

4c++怎么做界面

我们接着来写查询按钮的代码,输入以下代码:

QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE","rconntosqlite")

mydb.setDatabaseName("c:\\StudentInfo\\studentdata.db")

if(mydb.open())

{

QSqlQuery query(mydb)

QString sqlstr="select * from student"

bool isok=query.exec(sqlstr)

if(isok)

qDebug()<<"数据读取成功"

query.first()

QString result="学号:"+query.value(0).toString()+" "

+"姓名:"+query.value(1).toString()+" "

+"性别:"+query.value(2).toString()+" "

+"年龄:"+query.value(3).toString()

ui->lbl_query->setText(result)

}

与写入数据基本差不多,这里需要特别注意的是query.first()。看看Assistant怎么说的就知道了。原来,query对象在执行完查询语句后,query的位置被置于一个不可用的位置,如果想从query中获取数据,需要设置query到一个可用的记录中才行。方法有好几种,这里我们用了first()成员函数。

好,来看看运行结果。

可以看到软件读取的数据与控制台窗口的数据是一致的。

我们来总结下Qt *** 作SQLite数据库的五步走法决:

第一步,建立一个连接:QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE")

第二步,关联数据库文件:db.setDatabaseName("这里你的数据库文件路径")

第三步,打开数据库:db.open()

第四步,如果数据库打开成功,就建立一个相关联的QSqlQuery对象:QSqlQuery query(db)

第五步,执行SQL语句:query.exec("你的SQL语句字符串")


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10066791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存