基础
Qt设计师界面类
界面类关联信号槽的几种方式
在创建发送方时进行connect
qDebug()
foreach()
使用Qt资源文件
添加主窗口菜单
Gui应用,继承自QMainWindow,添加菜单键“新建(&F)”,·
添加菜单图标
NetWork
http
Example:HTTP Client
#include <QtNetwork>
显示网页
// 用来发送请求和接受应答
QNetworkReplyAccessManager *manager;
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
// 发送网络请求,以及post()函数
manager->get(QNetworkRequest(QUrl("https:***")));
// func replyFinished()
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(relpy.readAll());
下载文件
// 声明
QNetworkAccessManager *manager;
QNetworkReply *reply;
QUrl url;
QFile *file;
// Qt显示进度条 Progress Bar
ui->progressBar->setMaximum();
ui->progressBar->setValue();
ui->progressBar->hide();
ui->progressBar->show();
// func startRequest
reply = manager->get(QNetworkRequest(url));
// 接收数据
connect(reply, SIGNAL(readyRead()), this, SLOT(httpReadyRead()));
// 更新进度条
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(updateDataReadProgress(qint64, qint64)));
// 下载完成
connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));
file->write(reply->readAll());
file->flush();
file->close();
// 删除reply
reply->deleteLater();
// 文件处理
QFileInfo info(url.path); // ???
文件处理
数据
获取数据库驱动
QSqlDatabase::drivers()
编译数据库驱动,Assistant搜索SQL Database Drivers
数据库
利用QSqlQuery类执行SQL语句
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QSqlError> // 记录数据库错误头文件
#include <QDebug>
SqlLite数据库
// 创建SqlLite数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 数据库在内存中
db.setDatabaseName(":memory:");
// 创建查询对象
QSqlQuery query;
// 创建数据库,id,name,
query.exec("create table student (id int primary key, "
"name varchar(20))");
// 执行查询,并返回查询结果的最后一项记录,"查询语句"
query.exec();
// 查询对象query的下一条
query.next();
// 当前记录的第(int)属性(列)的value
query.value(int);
// 当前query所在第几项(行)
query.at();
// 获得现在指向的记录
query.record();
// 每条记录中属性(列)的数量
query.record().count();
// 某个属性所在列
query.record().indexOf();
// query指向结果集的第int条记录
query.seek(int);
// 定位到结果集的最后一条记录
query.last();
B i n d V a l u e ( ) BindValue() BindValue()和 a d d B i n d V a l u e ( ) addBindValue() addBindValue()添加记录
query.prepare("insert into student (id, name) values(:id, :name)");
query.bindValue(0, 5);
query.bindValue(1, "sixth");
query.exec();
// 或者
query.prepare("insert into student(id, name) "
"values (?, ?)");
query.bindValue(0, 5);
query.bindValue(1, "sixth");
query.exec();
// 或者
query.prepare("insert into student(id, name) "
"values (?, ?)");
query.addBindValue(5);
query.addBindValue("sixth");
query.exec();
// 或者
query.prepare("insert into student(id, name) "
"values (:id, :name)");
query.bindValue(":id", 5);
query.bindValue(":name", "sixth");
query.exec();
批处理操作
QSqlQuery q;
q.prepare("insert into student values (?, ?)");
QVariantList ints;
ints << 10 << 11 << 12 << 13;
q.addBindValue(ints);
QVariantList names;
// 最后一个是空字符串, 应与前几个格式相同
names << "xiaoming" << "xiaoliang" << "xiaogang" << QVariant(QVariant::String);
q.addBindValue(names);
错误处理
#include <QSqlError>
if (!q.execBatch()) // 进行批处理,如果出错就输出错误
qDebug() << q.lastError();
XML
QtXml Module
QT += xml
XML文件说明:节点,根节点,元素,属性,属性值
示例与读取
// 新建对象,代表一个XML文档
QDomDocument doc;
// 建立指向xml文件的QFile对象
QFile file("*.xml");
// 打开方式
file.open(QIODevice::Readonly);
file.open(QIODevice::WriteOnly | QIODevice::Truncate)
//
doc.setContent(&file);
// 获取doc第一个子节点,即文档说明
QDomNode firstNode = doc.firstChild();
//
firstNode.nodeName();
firstNode.nodeValue();
// 返回根元素
QDomElement docElem = doc.documentElement();
//
QDomNode n = docElem.firstChild();
// n的下一个兄弟节点
n.nextSibling();
//
QDomElement e = n.toElement();
qPrintable();
QDomNodeList list = e.childNodes();
list.at(i);
写XML文件
QDomDocument doc;
//添加处理指令,说明语句
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml","version=\"1.0\"encoding=\"UTF-8\"");
doc.appendChild(instruction);
QDomElement book = doc.createElement(tr());
QDomAttr id = doc.createAttribute();
QDomText text;
id.setValue();
book.setAttributeNode();
book.appendChild();
// UI
ui->listWidget->clear();
ui->listWidget->addItem();
使用流读写XML
QIODEVICE::WRITEONLY与QFILE::WRITEONLY(Qt文件操作)
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
QFile file();
// 读
if (!file.open(QFile::ReadOnly | QFile::Text)
{// 错误处理}
QXmlStreamReader reader;
// 设置文件,将流设置为初始状态
reader.setDevice(&file);
while(!reader.atEnd())
{
//
QXmlStreamReader::TokenType type = reader.readNext()
// 判断记号类型,并进行相应操作
if (type == QXmlStreamReader::StartDocument) {}
if (type == QXmlStreamReader::StartElement)
{
...;
if (reader.attributes().hasAttribute()) {}
}
if (type == QXmlStreamReader::EndElement) {}
if (type == QXmlStreamReader::Characters && !reader.isWhitespace() {}
}
if (reader.hasError(){
qDebug() << "error: " << reader.errorString();
}
// 写
if (!file.open(QFile::WriteOnly | QFile::Text)
{// 错误处理}
QXmlStreamWriter stream(&file);
// 设置自动格式,自动换行和添加缩进
stream.setAutoFormatting(true);
stream.writeStartDocument();
stream.writeStartElement();
stream.writeAttribute();
stream.writeTextElement();
stream.writeEndElement();
stream.writeEndDocument();
file.close();