重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

包含qt使用nosql的词条

qt怎么自动选择配置的define参数

当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,那我们只要选取参数部分看看

创新互联公司从2013年成立,先为旌阳等服务建站,旌阳等地企业,进行企业商务咨询服务。为旌阳企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

-release

这个参数显而易见,就是编译Qt以发布版的模式进行,一般来说,最后系统完成后,库就应该是发布版。

-release

与上面对应,自然是调试版了,如果开发的话,可以选择它吧。

-debug-and-release

囧,上面那两个的儿子。

-developer-build

囧,我错了,开发者也可以用这个的,选了这个后,可以进行自动测试,不过还没去用过,以后可以研究研究。

-opensource

-commercial

这两个参数是指是编译是商业版本的,还是开源版本呢,视个人情况而定。

-shared

-static

这两个参数是指Qt的lib以动态还是静态编译生成,这自然也是视个人需要的。

-no-fast

-fast

这两个就很有关系,如果对自己的电脑性能很有信心,那就选第一个,那所有的工程文件都会生成到makefiles中,那编译的时间,估计可以看完变形金刚了。如果选第二个,那就加入子目录和库到makefiles,这样就能加快编译的速度。

-no-largefile

-largefile

顾名思义,支不支持大文件,一般来说,嵌入式里是不会有从超过4G的大文件的,那就选第一个吧。

-no-exceptions

-exceptions

计算机英语够好的人都该懂,这个自然就是异常情况,选则编译器支持抛出异常,否则不支持。

-no-accessibility

-accessibility

可访问性的支持,说实话,这个我真不知道有什么有用了。等哪天发现了,再来好好解释。

-no-stl

-stl

是都加入stl的支持,stl,这应该算是C++程序员应该都了解了,再不济,那也总听说过大名吧。

no-sql-driver

-qt-sql-driver

-plugin-sql-driver

这 个可要好好说明下,一般来说,对于一个优秀的项目开发,数据库是必不可少的,qt也自带了大多数数据库驱动,可以完美地支持数据库的使用。对于数 据库的使用,我们可以直接qt驱动编译进去,或者以插件的形式编译进去。一般来说,最简单地就是直接编译进去,但使用插件形式的可以更加灵活,针对不同的 需求将驱动插件添加。其中,代表的是驱动名,如果我想直接添加sqlite的支持话,形式如下:-qt-sql-sqlite。其他名称 可以自己查看参数里,有详细地介绍。

-system-sqlite

sqlite真受欢迎啊,当然那么优秀的嵌入式数据库,本人也是基本使用它来进行开发。这个参数意思是使用操作系统上的sqlite数据库,如果是不太会移植的,可以考虑直接使用qt自带的驱动。

-no-qt3support

-qt3support

这个也是简洁易懂,加不加对qt3的支持。

no-xmlpatterns

-xmlpatterns

选择对xml的支持,如果对网络无需求的话,就不用加了。

-no-phonon

-phonon

phonon是qt中处理多媒体的模块,比如放放视频什么来着,不过本人从没用过,也是根据需要选择的。

-no-phonon-backend

-phonon-backend

与上面类似,只不过这两是以插件的形式加入支持。

-no-svg

-svg

是否加入svg的支持,svg即可缩放矢量图形。

-no-webkit

-webkit

是否加入webkit的支持,这可是个好东西,不过如果跟网络不搭界的话,还是不支持吧。

-no-scripttools

-scripttools

是否加入脚本工具的支持,这对php等脚本工程师来说是个很棒的参数,但对于我这样菜鸟,就别提了。

-platform target

目标平台,这可是关键了,如果不注意的话,编译出来是x86上的话,哪怕是再牛的嵌入式工程师来也没法帮你移植到开发板上。通常,本人是linux-arm-g++。

-no-mmx

-no-3dnow

-no-sse

-no-sse2

这四个参数是针对CPU的指令集,老实说,我也不甚了解,不过,对于开发并不是影响很大。

-qtnamespace

把qt的库封装到命名空间,没啥重要用处,依个人爱好加吧。

-qtlibinfix

将所有的qt的.so库重命名,也没啥大用处。

-no-sql-driver

-qt-sql-driver

-plugin-sql-driver

-system-sqlite

这是相当明显的,如果这都看不出来,,囧,那您一定比我近视(本人800度近视。。)

就 是说如果是-no-XX-,就说明编译时不选择这个参数,如过是-qt-XX-,说明我们可以编译直接选用qt自带的驱动,如果是 -plugin-XX-,就是将驱动以插件形式编译,而-system-XXX,当然是使用操作系统提供的驱动,不过那就需要您自己移植了,而且有时还要 用第三方的API,就方便来说非常麻烦,但是不排除您是牛人要好好玩玩的情况。

接下来,我们接着研究配置参数。

-qt-zlib

-system-zlib

想 必经过上面的讲解,参数的意思已经很快得知,就是选择qt带的zlib库还是系统的zlib。zlib库是用于文件和资料压缩的库,对于新入嵌入式的人来 说,可能并无太大的用处,但是在以后的实际开发中,特别是对于多媒体图像图形的工程师来说,就肯定用到,因为图形图像的压缩都要使用或涉及到这个库。

-no-gif

-qt-gif

这是选择gif的支持,如果选择qt支持的话,那在用qt开发的项目中,就能显示gif图,gif也是比较普遍的图片格式了,英文全称是Graphics Interchange Format。

-no-libtiff

-qt-libtiff

-system-libtiff

tiff是一种非常复杂的光栅图像格式,并且有直接现成的C语言实现库,因此选择参数时就有了qt和system,一般来说,科学相关的开发里可能会用到。

-no-libpng

-qt-libpng

-system-libpng

png的相关参数,一种非失真性压缩位图图形文件格式,其实就是为了替代gif搞出来的,也是随实际需要来选择,当然,也有C语言实现的库。

-no-libmng

-qt-libmng

-system-libmng

大汗,大汗,这可是超级罕见的东西,QT竟然也能支持,说实话,这个参数我看来就是无视的。MNG是多帧PNG动画格式,结构极其复杂,基本没人用。

-no-libjpeg

-qt-libjpeg

-system-libjpeg

jpeg,这么有名的图片格式也不用说了,随需要选择吧。

-no-openssl

-openssl

-openssl-linked

SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认,而OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件 包,在qt中,我们可以选择直接支持,或者OpenSSL链接支持,这个参数也是为有需要者提供的。

以上是第三方库的参数选择,紧接着就是qt附加参数,在附加参数里,我们可以指定编译的部分及加入参数来获取信息。

-make

-nomake

一 句话,说明,就说我可以这两个参数选择哪些我要编译,哪些我不需要,在 libs tools examples demos docs translations这些里你可以选择,比如examples,并不重要,可以放在-nomake后,这样编译过程中就不会编译这部分了。通过适当的 选择,我们可以大大加快编译的速度,这对配置较差的机子来说有着积极意义。

-R string

-l string

这两个参数是为编译时增加一个库的运行路径及头文件的路径,比如使用tslib作为开发触摸驱动时,我们就应使用这两个参数来指定tslib的库路径和头文件路径。

-no-rpath

-rpath

这个参数比较难于理解,简单地说,就是告诉动态加载器,到-rpath指定的目录中寻找编译时须要的动态链接库,语法就与上面的参数结合,比如 -rpath -R/home/xxxx。

-continue

这个参数的作用就是当出现错误时依然进行配置编译,换我是不会加上的。

-verbose, -v

这个参数就很眼熟,在前面的文章中有过详细介绍,简言之,就是显示配置的每一步的具体信息。

-no-optimized-qmake

-optimized-qmake

是否编译生成优化过的qmake,没啥大用,也属于可有可无的参数。

-no-nis

-nis

是否编译NIS支持,NIS(网络信息服务)是一个提供目录服务的RPC(远程过程调用)应用服务,当然没网络需要的可以再次华丽地无视。

-no-cups

-cups

是 否编译CUPS支持,是不是想问什么用啊?~~~~囧,开打印店用的。好了,不说冷笑话,CUPS给Unix/Linux用户提供了一种可靠有效 的方法来管理打印。它支持IPP,并提供了LPD,SMB(服务消息块,如配置为微软WINDOWS的打印机)、JetDirect等接口。CUPS还可 以浏览网络打印机。它的开发提供者是大名鼎鼎的“水果生产商”----苹果公司。

-no-iconv

-iconv

选择是否编译iconv支持,iconv是一个计算机程序以及一套应用程序编程接口的名称。它的作用是在多种国际编码格式之间进行文本内码的转换。这对跨语言Qt开发人员来说是很有用的,当然,考虑到中文的编码,我也选择加入支持。

-no-pch

-pch

是 否支持预编译过的头文件。预编译头就是把一个工程中的一部分代码,预先编译好放在一个文件里(通常以.pch为扩展名),这个文件就称为预编译头 文件。这些预先编译好的代码在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。妈妈经常说:不懂就要学。我说:不 懂就加上。。。

no-dbus

-dbus

-dbus-linked

是否编译编译QtDBus模块。dbus是freedesktop下开源的Linux IPC通信机制,本身Linux 的IPC通信机制包括,管道(fifo),共享内存,信号量,消息队列,Socket等。在Qt中DBUS是有单独的模块的,可见其重要性。

-reduce-relocations 对于额外的库链接器优化,可以减少编译中的再定位。

no-separate-debug-info

-separate-debug-info

是否存储debug信息在.debug,一般为了查错,还是选择存储吧。

-xplatform target

相当浅显的参数,即交叉编译的目标平台,一般来说根据你所要移植的目标板来确定。

-no-feature-feature

-feature-feature

选 取qte的feature编译,对于这个,我理解为特性,特性的描述你可以参考src/corelib/global/qfeatures.txt,在这 里面对于每个特性都有比较充分的讲解。对于特性地选择,也是要根据开发需求进行,如果裁剪适当,能大大为qte库瘦身。

-embedded arch

嵌入式平台架构选择,可以选择arm,mips,x86及generic,视你的目标平台决定吧。

-armfpa

-no-armfpa

这个参数也只是针对ARM平台的,是否加入对于基于ARM的浮点数格式的支持,通常,这个参数在编译时会自动选择。

-little-endian

-big-endian

目标平台的大端和小端选择,这应该是常识了,如果这不知道,就不要来混嵌入式了

-host-little-endian

-host-big-endia

主机平台的大端和小端选择,属于鸡肋的参数,不选择也会在配置时自动选择。

-no-freetype

-qt-freetype

-system-freetype

选择freetype,FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,在嵌入式开发中,有套可使用的字体对于中文开发至关重要,本人一般使用文泉驿字体。

-qconfig local

使用本地的qconfig配置文件来替代全部参数配置,有需要的可以去研究下,可以裁剪控件级别的参数。

-depths list

显示的像素位深,也是根据需要来进行吧。

-qt-decoration-style

-plugin-decoration-style

-no-decoration-style

这个是选择qt的样式风格,对于需要美化界面的项目来说,可以好好选择下。

-no-opengl

-opengl api

是否加入opengl的支持,OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。不过对于一般的开发来说,似乎有很少用到的地方。

-qt-gfx-driver

-plugin-gfx-driver

-no-gfx-driver

这个是相当重要的一个参数,选择QtGui的图形显示驱动,比如我们在pc上使用qvfb模拟时,就应该加入对qfvb的支持。我们可以在 linuxfb,transformed,qvfb,vnc,multiscreen这几个中选择。在平常的开发板上,选择linuxfb即可。

-qt-kbd-driver

-plugin-kbd-driver

-no-kbd-driver

选择键盘的驱动支持,可以支持usb键盘,串口键盘等等,也是在tty,usb ,sl5000, yopy, vr41xx ,qvfb中选择。

qt-mouse-driver

-plugin-mouse-driver

-no-mouse-driver

鼠标的驱动支持,一般都会选择tslib,可以完美地支持触摸屏,在pc,bus,linuxtp,yopy,vr41xx,tslib,qvfb中选择吧。

-iwmmxt

加入iWMMXt指令的编译,也只是部分XScale架构才具有。

-no-glib

-glib

是否加入glib库的支持,glib库对应即gtk库,就也是说加入后可以使用gtk。

请教高手如何使用QT建立SQLite数据库啊??急!!

#include QtGui

#include QtSql

#include "scooterwindow.h"

ScooterWindow::ScooterWindow()

{

model = new QSqlTableModel(this);

model-setTable("scooter");

model-setSort(Scooter_Name, Qt::AscendingOrder);

model-setHeaderData(Scooter_Name, Qt::Horizontal, tr("Name"));

model-setHeaderData(Scooter_MaxSpeed, Qt::Horizontal, tr("MPH"));

model-setHeaderData(Scooter_MaxRange, Qt::Horizontal, tr("Miles"));

model-setHeaderData(Scooter_Weight, Qt::Horizontal, tr("Lbs"));

model-setHeaderData(Scooter_Description, Qt::Horizontal,

tr("Description"));

model-select();

view = new QTableView;

view-setModel(model);

view-setSelectionMode(QAbstractItemView::SingleSelection);

view-setSelectionBehavior(QAbstractItemView::SelectRows);

view-setColumnHidden(Scooter_Id, true);

view-resizeColumnsToContents();

view-setEditTriggers(QAbstractItemView::NoEditTriggers);

QHeaderView *header = view-horizontalHeader();

header-setStretchLastSection(true);

QHBoxLayout *mainLayout = new QHBoxLayout;

mainLayout-addWidget(view);

setLayout(mainLayout);

setWindowTitle(tr("Scooters"));

}

#ifndef SCOOTERWINDOW_H

#define SCOOTERWINDOW_H

#include QWidget

class QSqlTableModel;

class QTableView;

enum {

Scooter_Id = 0,

Scooter_Name = 1,

Scooter_MaxSpeed = 2,

Scooter_MaxRange = 3,

Scooter_Weight = 4,

Scooter_Description = 5

};

class ScooterWindow : public QWidget

{

Q_OBJECT

public:

ScooterWindow();

private:

QSqlTableModel *model;

QTableView *view;

};

#endif

#include QtGui

#include QtSql

#include "scooterwindow.h"

bool createConnection()

{

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

db.setDatabaseName("scooters.dat");

if (!db.open()) {

QMessageBox::warning(0, QObject::tr("Database Error"),

db.lastError().text());

return false;

}

return true;

}

void createFakeData()

{

QSqlQuery query;

query.exec("DROP TABLE scooter");

query.exec("CREATE TABLE scooter ("

"id INTEGER PRIMARY KEY AUTOINCREMENT, "

"name VARCHAR(40) NOT NULL, "

"maxspeed INTEGER NOT NULL, "

"maxrange INTEGER NOT NULL, "

"weight INTEGER NOT NULL, "

"description VARCHAR(80) NOT NULL)");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Mod-Rad 1500', 40, 35, 298, "

"'Speedometer, odometer, battery meter, turn signal "

"indicator, locking steering column')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Rad2Go Great White E36', 22, 12, 93, "

"'10\" airless tires')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('X-Treme X360', 21, 14, 59, "

"'Cargo rack, foldable')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Vego SX 600', 20, , 76, "

"'Two interchangeable batteries, foldable')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Sunbird E Bike', 18, 30, 118, '')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Leopard Shark', 16, 12, 63, "

"'Battery indicator, removable seat, foldable')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Vego iQ 450', 15, 0, 60, "

"'OUT OF STOCK')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('X-Treme X-11', 15, 11, 38, "

"'High powered brakes, foldable')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('ZZ Cruiser', 14, 10, 46, "

"'Two batteries, removable seat')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('X-Treme X-010', 10, 10, 14, "

"'Solid tires')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Q Electric Chariot', 10, 15, 60, "

"'Foldable')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('X-Treme X250', 15, 12, 0, "

"'Solid aluminum deck')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Go MotorBoard 2000X', 15, 0, 20, "

"'Foldable and carryable')");

query.exec("INSERT INTO scooter (name, maxspeed, "

"maxrange, weight, description) "

"VALUES ('Goped ESR750 Sport Electric Scooter', "

"20, 6, 45, " "'Foldable and carryable')");

}

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

bool create = !QFile::exists("scooters.dat");

if (!createConnection())

return 1;

if (create)

createFakeData();

ScooterWindow window;

window.resize(600, 500);

window.show();

return app.exec();

}

如何用Qt连接数据库并导入文件?

可以使用QT自带的数据库完成操作,以下是参考代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");    //添加数据库

db.setDatabaseName("note.db");     //创建一个note.db的文件存储数据

db.open();   //开启数据库

query = QSqlQuery(db);  //获得访问数据库的query

query.exec(XXX);   //执行指令(XXX为SQL指令)

db.close();   //关闭数据库

一般而言会将db变量作为全局变量或者数据成员,当需要访问的时候就获取一个query就可以了。

要实现所提到的功能,要好好看看QString、QStringList,这两玩意主要是临时存放数据、分割数据等作用,另外,要看QFile、QDir、QFileInfo、QTextStream,这四个主要用来读取文本数据。看看QVector或者QList等来存放读出来的数据。

另外,要实现这玩意,SQL的语句不要求精通,但是基本的Create、Insert、Select、Delete等操作要准确无误。否则出错了QT是看不出来的。QT不会检测SQL的准确性的。

Qt 软件中怎么自动加入build版本号

当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,那我们只要选取参数部分看看-release 这个参数显而易见,就是编译Qt以发布版的模式进行,一般来说,最后系统完成后,库就应该是发布版。 -release 与上面对应,自然是调试版了,如果开发的话,可以选择它吧。 -debug-and-release 囧,上面那两个的儿子。 -developer-build 囧,我错了,开发者也可以用这个的,选了这个后,可以进行自动测试,不过还没去用过,以后可以研究研究。 -opensource -commercial 这两个参数是指是编译是商业版本的,还是开源版本呢,视个人情况而定。 -shared -static 这两个参数是指Qt的lib以动态还是静态编译生成,这自然也是视个人需要的。 -no-fast -fast 这两个就很有关系,如果对自己的电脑性能很有信心,那就选第一个,那所有的工程文件都会生成到makefiles中,那编译的时间,估计可以看完变形金刚了。如果选第二个,那就加入子目录和库到makefiles,这样就能加快编译的速度。 -no-largefile -largefile 顾名思义,支不支持大文件,一般来说,嵌入式里是不会有从超过4G的大文件的,那就选第一个吧。 -no-exceptions -exceptions 计算机英语够好的人都该懂,这个自然就是异常情况,选则编译器支持抛出异常,否则不支持。 -no-accessibility -accessibility 可访问性的支持,说实话,这个我真不知道有什么有用了。等哪天发现了,再来好好解释。 -no-stl -stl 是都加入stl的支持,stl,这应该算是C++程序员应该都了解了,再不济,那也总听说过大名吧。 no-sql-driver -qt-sql-driver -plugin-sql-driver 这 个可要好好说明下,一般来说,对于一个优秀的项目开发,数据库是必不可少的,qt也自带了大多数数据库驱动,可以完美地支持数据库的使用。对于数 据库的使用,我们可以直接qt驱动编译进去,或者以插件的形式编译进去。一般来说,最简单地就是直接编译进去,但使用插件形式的可以更加灵活,针对不同的 需求将驱动插件添加。其中,代表的是驱动名,如果我想直接添加sqlite的支持话,形式如下:-qt-sql-sqlite。其他名称 可以自己查看参数里,有详细地介绍。 -system-sqlite sqlite真受欢迎啊,当然那么优秀的嵌入式数据库,本人也是基本使用它来进行开发。这个参数意思是使用操作系统上的sqlite数据库,如果是不太会移植的,可以考虑直接使用qt自带的驱动。 -no-qt3support -qt3support 这个也是简洁易懂,加不加对qt3的支持。 no-xmlpatterns -xmlpatterns 选择对xml的支持,如果对网络无需求的话,就不用加了。 -no-phonon -phonon phonon是qt中处理多媒体的模块,比如放放视频什么来着,不过本人从没用过,也是根据需要选择的。 -no-phonon-backend -phonon-backend 与上面类似,只不过这两是以插件的形式加入支持。 -no-svg -svg 是否加入svg的支持,svg即可缩放矢量图形。 -no-webkit -webkit 是否加入webkit的支持,这可是个好东西,不过如果跟网络不搭界的话,还是不支持吧。 -no-scripttools -scripttools 是否加入脚本工具的支持,这对php等脚本工程师来说是个很棒的参数,但对于我这样菜鸟,就别提了。 -platform target 目标平台,这可是关键了,如果不注意的话,编译出来是x86上的话,哪怕是再牛的嵌入式工程师来也没法帮你移植到开发板上。通常,本人是linux-arm-g++。 -no-mmx -no-3dnow -no-sse -no-sse2 这四个参数是针对CPU的指令集,老实说,我也不甚了解,不过,对于开发并不是影响很大。 -qtnamespace 把qt的库封装到命名空间,没啥重要用处,依个人爱好加吧。 -qtlibinfix 将所有的qt的.so库重命名,也没啥大用处。 -no-sql-driver -qt-sql-driver -plugin-sql-driver -system-sqlite 这是相当明显的,如果这都看不出来,,囧,那您一定比我近视(本人800度近视。。) 就 是说如果是-no-XX-,就说明编译时不选择这个参数,如过是-qt-XX-,说明我们可以编译直接选用qt自带的驱动,如果是 -plugin-XX-,就是将驱动以插件形式编译,而-system-XXX,当然是使用操作系统提供的驱动,不过那就需要您自己移植了,而且有时还要 用第三方的API,就方便来说非常麻烦,但是不排除您是牛人要好好玩玩的情况。 接下来,我们接着研究配置参数。 -qt-zlib -system-zlib 想 必经过上面的讲解,参数的意思已经很快得知,就是选择qt带的zlib库还是系统的zlib。zlib库是用于文件和资料压缩的库,对于新入嵌入式的人来 说,可能并无太大的用处,但是在以后的实际开发中,特别是对于多媒体图像图形的工程师来说,就肯定用到,因为图形图像的压缩都要使用或涉及到这个库。 -no-gif -qt-gif 这是选择gif的支持,如果选择qt支持的话,那在用qt开发的项目中,就能显示gif图,gif也是比较普遍的图片格式了,英文全称是Graphics Interchange Format。 -no-libtiff -qt-libtiff -system-libtiff tiff是一种非常复杂的光栅图像格式,并且有直接现成的C语言实现库,因此选择参数时就有了qt和system,一般来说,科学相关的开发里可能会用到。 -no-libpng -qt-libpng -system-libpng png的相关参数,一种非失真性压缩位图图形文件格式,其实就是为了替代gif搞出来的,也是随实际需要来选择,当然,也有C语言实现的库。 -no-libmng -qt-libmng -system-libmng 大汗,大汗,这可是超级罕见的东西,QT竟然也能支持,说实话,这个参数我看来就是无视的。MNG是多帧PNG动画格式,结构极其复杂,基本没人用。 -no-libjpeg -qt-libjpeg -system-libjpeg jpeg,这么有名的图片格式也不用说了,随需要选择吧。 -no-openssl -openssl -openssl-linked SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认,而OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件 包,在qt中,我们可以选择直接支持,或者OpenSSL链接支持,这个参数也是为有需要者提供的。 以上是第三方库的参数选择,紧接着就是qt附加参数,在附加参数里,我们可以指定编译的部分及加入参数来获取信息。 -make -nomake 一 句话,说明,就说我可以这两个参数选择哪些我要编译,哪些我不需要,在 libs tools examples demos docs translations这些里你可以选择,比如examples,并不重要,可以放在-nomake后,这样编译过程中就不会编译这部分了。通过适当的 选择,我们可以大大加快编译的速度,这对配置较差的机子来说有着积极意义。 -R string -l string 这两个参数是为编译时增加一个库的运行路径及头文件的路径,比如使用tslib作为开发触摸驱动时,我们就应使用这两个参数来指定tslib的库路径和头文件路径。 -no-rpath -rpath 这个参数比较难于理解,简单地说,就是告诉动态加载器,到-rpath指定的目录中寻找编译时须要的动态链接库,语法就与上面的参数结合,比如 -rpath -R/home/xxxx。 -continue 这个参数的作用就是当出现错误时依然进行配置编译,换我是不会加上的。 -verbose, -v 这个参数就很眼熟,在前面的文章中有过详细介绍,简言之,就是显示配置的每一步的具体信息。 -no-optimized-qmake -optimized-qmake 是否编译生成优化过的qmake,没啥大用,也属于可有可无的参数。 -no-nis -nis 是否编译NIS支持,NIS(网络信息服务)是一个提供目录服务的RPC(远程过程调用)应用服务,当然没网络需要的可以再次华丽地无视。 -no-cups -cups 是 否编译CUPS支持,是不是想问什么用啊?~~~~囧,开打印店用的。好了,不说冷笑话,CUPS给Unix/Linux用户提供了一种可靠有效 的方法来管理打印。它支持IPP,并提供了LPD,SMB(服务消息块,如配置为微软WINDOWS的打印机)、JetDirect等接口。CUPS还可 以浏览网络打印机。它的开发提供者是大名鼎鼎的“水果生产商”----苹果公司。 -no-iconv -iconv 选择是否编译iconv支持,iconv是一个计算机程序以及一套应用程序编程接口的名称。它的作用是在多种国际编码格式之间进行文本内码的转换。这对跨语言Qt开发人员来说是很有用的,当然,考虑到中文的编码,我也选择加入支持。 -no-pch -pch 是 否支持预编译过的头文件。预编译头就是把一个工程中的一部分代码,预先编译好放在一个文件里(通常以.pch为扩展名),这个文件就称为预编译头 文件。这些预先编译好的代码在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。妈妈经常说:不懂就要学。我说:不 懂就加上。。。 no-dbus -dbus -dbus-linked 是否编译编译QtDBus模块。dbus是freedesktop下开源的Linux IPC通信机制,本身Linux 的IPC通信机制包括,管道(fifo),共享内存,信号量,消息队列,Socket等。在Qt中DBUS是有单独的模块的,可见其重要性。-reduce-relocations 对于额外的库链接器优化,可以减少编译中的再定位。 no-separate-debug-info -separate-debug-info 是否存储debug信息在.debug,一般为了查错,还是选择存储吧。 -xplatform target 相当浅显的参数,即交叉编译的目标平台,一般来说根据你所要移植的目标板来确定。 -no-feature-feature -feature-feature 选 取qte的feature编译,对于这个,我理解为特性,特性的描述你可以参考src/corelib/global/qfeatures.txt,在这 里面对于每个特性都有比较充分的讲解。对于特性地选择,也是要根据开发需求进行,如果裁剪适当,能大大为qte库瘦身。 -embedded arch 嵌入式平台架构选择,可以选择arm,mips,x86及generic,视你的目标平台决定吧。 -armfpa -no-armfpa 这个参数也只是针对ARM平台的,是否加入对于基于ARM的浮点数格式的支持,通常,这个参数在编译时会自动选择。 -little-endian -big-endian 目标平台的大端和小端选择,这应该是常识了,如果这不知道,就不要来混嵌入式了 -host-little-endian -host-big-endia 主机平台的大端和小端选择,属于鸡肋的参数,不选择也会在配置时自动选择。 -no-freetype -qt-freetype -system-freetype 选择freetype,FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,在嵌入式开发中,有套可使用的字体对于中文开发至关重要,本人一般使用文泉驿字体。 -qconfig local 使用本地的qconfig配置文件来替代全部参数配置,有需要的可以去研究下,可以裁剪控件级别的参数。 -depths list 显示的像素位深,也是根据需要来进行吧。 -qt-decoration-style -plugin-decoration-style -no-decoration-style 这个是选择qt的样式风格,对于需要美化界面的项目来说,可以好好选择下。 -no-opengl -opengl api 是否加入opengl的支持,OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。不过对于一般的开发来说,似乎有很少用到的地方。 -qt-gfx-driver -plugin-gfx-driver -no-gfx-driver 这个是相当重要的一个参数,选择QtGui的图形显示驱动,比如我们在pc上使用qvfb模拟时,就应该加入对qfvb的支持。我们可以在 linuxfb,transformed,qvfb,vnc,multiscreen这几个中选择。在平常的开发板上,选择linuxfb即可。 -qt-kbd-driver -plugin-kbd-driver -no-kbd-driver 选择键盘的驱动支持,可以支持usb键盘,串口键盘等等,也是在tty,usb ,sl5000, yopy, vr41xx ,qvfb中选择。 qt-mouse-driver -plugin-mouse-driver -no-mouse-driver 鼠标的驱动支持,一般都会选择tslib,可以完美地支持触摸屏,在pc,bus,linuxtp,yopy,vr41xx,tslib,qvfb中选择吧。 -iwmmxt 加入iWMMXt指令的编译,也只是部分XScale架构才具有。 -no-glib -glib 是否加入glib库的支持,glib库对应即gtk库,就也是说加入后可以使用gtk。

用qt怎么备份Oracle数据库

Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外,我们强调了“基于 SQL”,因为 NoSQL 数据库至今没有一个通用查询方法,所以不可能提供一种通用的 NoSQL 数据库的操作。Qt 的数据库操作还可以很方便的与 model/view 架构进行整合。通常来说,我们对数据库的操作更多地在于对数据库表的操作,而这正是 model/view 架构的长项。

Qt 使用QSqlDatabase表示一个数据库连接。更底层上,Qt 使用驱动(drivers)来与不同的数据库 API 进行交互。Qt 桌面版本提供了如下几种驱动:

驱动 数据库

QDB2 IBM DB2 (7.1 或更新版本)

QIBASE Borland InterBase

QMYSQL MySQL

QOCI Oracle Call Interface Driver

QODBC Open Database Connectivity (ODBC) – Microsoft SQL Server 及其它兼容 ODBC 的数据库

QPSQL PostgreSQL (7.3 或更新版本)

QSQLITE2 SQLite 2

QSQLITE SQLite 3

QSYMSQL 针对 Symbian 平台的SQLite 3

QTDS Sybase Adaptive Server (自 Qt 4.7 起废除)

不过,由于受到协议的限制,Qt 开源版本并没有提供上面所有驱动的二进制版本,而仅仅以源代码的形式提供。通常,Qt 只默认搭载 QSqlite 驱动(这个驱动实际还包括 Sqlite 数据库,也就是说,如果需要使用 Sqlite 的话,只需要该驱动即可)。我们可以选择把这些驱动作为 Qt 的一部分进行编译,也可以当作插件编译。

如果习惯于使用 SQL 语句,我们可以选择QSqlQuery类;如果只需要使用高层次的数据库接口(不关心 SQL 语法),我们可以选择QSqlTableModel和QSqlRelationalTableModel。我们只介绍QSqlQuery类的使用。

在使用时,我们可以通过

QSqlDatabase::drivers();

1

找到系统中所有可用的数据库驱动的名字列表。我们只能使用出现在列表中的驱动。由于默认情况下,QtSql 是作为 Qt 的一个模块提供的。为了使用有关数据库的类,我们必须早 .pro 文件中添加这么一句:

QT += sql

1

这表示,我们的程序需要使用 Qt 的 core、gui 以及 sql 三个模块。注意,如果需要同时使用 Qt4 和 Qt5 编译程序,通常我们的 .pro 文件是这样的:

QT += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

1

2

这两句也很明确:Qt 需要加载 core、gui 和 sql 三个模块,如果主板本大于 4,则再添加 widgets 模块。

下面来看一个简单的函数:

bool connect(const QString dbName)

{

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

// db.setHostName("host");

// db.setDatabaseName("dbname");

// db.setUserName("username");

// db.setPassword("password");

db.setDatabaseName(dbName);

if (!db.open()) {

QMessageBox::critical(0, QObject::tr("Database Error"),

db.lastError().text());

return false;

}

return true;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

我们使用connect()函数创建一个数据库连接。我们使用QSqlDatabase::addDatabase()静态函数完成这一请求,也就是创建了一个QSqlDatabase实例。注意,数据库连接使用自己的名字进行区分,而不是数据库的名字。例如,我们可以使用下面的语句:

QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE", QString("con%1").arg(dbName));

1

此时,我们是使用addDatabase()函数的第二个参数来给这个数据库连接一个名字。在这个例子中,用于区分这个数据库连接的名字是QString(“conn%1”).arg(dbName),而不是 “QSQLITE”。这个参数是可选的,如果不指定,系统会给出一个默认的名字QSqlDatabase::defaultConnection,此时,Qt 会创建一个默认的连接。如果你给出的名字与已存在的名字相同,新的连接会替换掉已有的连接。通过这种设计,我们可以为一个数据库建立多个连接。

我们这里使用的是 sqlite 数据库,只需要指定数据库名字即可。如果是数据库服务器,比如 MySQL,我们还需要指定主机名、端口号、用户名和密码,这些语句使用注释进行了简单的说明。

接下来我们调用了QSqlDatabase::open()函数,打开这个数据库连接。通过检查open()函数的返回值,我们可以判断数据库是不是正确打开。

QtSql 模块中的类大多具有lastError()函数,用于检查最新出现的错误。如果你发现数据库操作有任何问题,应该使用这个函数进行错误的检查。这一点我们也在上面的代码中进行了体现。当然,这只是最简单的实现,一般来说,更好的设计是,不要在数据库操作中混杂界面代码(并且将这个connect()函数放在一个专门的数据库操作类中)。

接下来我们可以在main()函数中使用这个connect()函数:

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

if (connect("demo.db")) {

QSqlQuery query;

if (!query.exec("CREATE TABLE student ("

"id INTEGER PRIMARY KEY AUTOINCREMENT,"

"name VARCHAR,"

"age INT)")) {

QMessageBox::critical(0, QObject::tr("Database Error"),

query.lastError().text());

return 1;

}

} else {

return 1;

}

return a.exec();

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

main()函数中,我们调用这个connect()函数打开数据库。如果打开成功,我们通过一个QSqlQuery实例执行了 SQL 语句,就是query.exec();。同样,我们使用其lastError()函数检查了执行结果是否正确。

注意这里的QSqlQuery实例的创建。我们并没有指定是为哪一个数据库连接创建查询对象,此时,系统会使用默认的连接,也就是使用没有第二个参数的addDatabase()函数创建的那个连接(其实就是名字为QSqlDatabase::defaultConnection的默认连接)。如果没有这么一个连接,系统就会报错。也就是说,如果没有默认连接,我们在创建QSqlQuery对象时必须指明是哪一个QSqlDatabase对象,也就是addDatabase()的返回值。

我们还可以通过使用QSqlQuery::isActive()函数检查语句执行正确与否。如果QSqlQuery对象是活动的,该函数返回 true。所谓“活动”,就是指该对象成功执行了exec()函数,但是还没有完成。如果需要设置为不活动的,可以使用finish()或者clear()函数,或者直接释放掉这个QSqlQuery对象。这里需要注意的是,如果存在一个活动的 SELECT 语句,某些数据库系统不能成功完成connect()或者rollback()函数的调用。此时,我们必须首先将活动的 SELECT 语句设置成不活动的。

创建过数据库表 student 之后,我们开始插入数据,然后将其独取出来:

if (connect("demo.db")) {

QSqlQuery query;

query.prepare("INSERT INTO student (name, age) VALUES (?, ?)");

QVariantList names;

names "Tom" "Jack" "Jane" "Jerry";

query.addBindValue(names);

QVariantList ages;

ages 20 23 22 25;

query.addBindValue(ages);

if (!query.execBatch()) {

QMessageBox::critical(0, QObject::tr("Database Error"),

query.lastError().text());

}

query.finish();

query.exec("SELECT name, age FROM student");

while (query.next()) {

QString name = query.value(0).toString();

int age = query.value(1).toInt();

qDebug() name ": " age;

}

} else {

return 1;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

依旧连接到我们创建的 demo.db 数据库。我们需要插入多条数据,此时可以使用QSqlQuery::exec()函数一条一条插入数据,但是这里我们选择了另外一种方法:批量执行。首先,我们使用QSqlQuery::prepare()函数对这条 SQL 语句进行预处理,问号 ? 相当于占位符,预示着以后我们可以使用实际数据替换这些位置。简单说明一下,预处理是数据库提供的一种特性,它会将 SQL 语句进行编译,性能和安全性都要优于普通的 SQL 处理。在上面的代码中,我们使用一个字符串列表 names 替换掉第一个问号的位置,一个整型列表 ages 替换掉第二个问号的位置,利用QSqlQuery::addBindValue()我们将实际数据绑定到这个预处理的 SQL 语句上。需要注意的是,names 和 ages 这两个列表里面的数据需要一一对应。然后我们调用QSqlQuery::execBatch()批量执行 SQL,之后结束该对象。这样,插入操作便完成了。

另外说明一点,我们这里使用了 ODBC 风格的 ? 占位符,同样,我们也可以使用 Oracle 风格的占位符:

query.prepare("INSERT INTO student (name, age) VALUES (:name, :age)");

1

此时,我们就需要使用

query.bindValue(":name", names);

query.bindValue(":age", ages);

1

2

进行绑定。Oracle 风格的绑定最大的好处是,绑定的名字和值很清晰,与顺序无关。但是这里需要注意,bindValue()函数只能绑定一个位置。比如

query.prepare("INSERT INTO test (name1, name2) VALUES (:name, :name)");

// ...

query.bindValue(":name", name);

1

2

3

只能绑定第一个 :name 占位符,不能绑定到第二个。

接下来我们依旧使用同一个查询对象执行一个 SELECT 语句。如果存在查询结果,QSqlQuery::next()会返回 true,直到到达结果最末,返回 false,说明遍历结束。我们利用这一点,使用 while 循环即可遍历查询结果。使用QSqlQuery::value()函数即可按照 SELECT 语句的字段顺序获取到对应的数据库存储的数据。

对于数据库事务的操作,我们可以使用 QSqlDatabase::transaction() 开启事务,QSqlDatabase::commit() 或者QSqlDatabase::rollback() 结束事务。使用QSqlDatabase::database()函数则可以根据名字获取所需要的数据库连接。


本文名称:包含qt使用nosql的词条
网页链接:http://cqcxhl.com/article/dsgecoo.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP