bool database::createDatabase()
{
QSqlQuery query // 此处请查询 query的相关 *** 作
qDebug() <<"Start to create table..."
//create table: User
query.exec("CREATE TABLE [User] ( [userId] VARCHAR(40) NOT NULL, [username] VARCHAR(40) NOT NULL, [email] VARCHAR(40), [password] VARCHAR(40), [city] VARCHAR(20), PRIMARY KEY([userId]) )")// 一定注意不要拼写错误,引号内是不提示拼写错误的。
//create table: Connect
query.exec("CREATE TABLE [Connect] ( [LeftUser] VARCHAR(40) NOT NULL, [RightUser] VARCHAR(40) NOT NULL, [relation] INTEGER DEFAULT '0' NULL, PRIMARY KEY ([LeftUser], [RightUser]))")
if (query.lastError().isValid())
{
qDebug() <<query.lastError()
return false
}
else
{
qDebug() <<"Create database successfully."
}
return true
}
插入 *** 作
bool database::adduser( User user )
{
if (!db.isOpen())
{
createconnection()
}
QSqlQuery query
qDebug() <<"start to insert data"
query.exec("INSERT INTO [User] ( userId, username, email, password, city) VALUES(?,?,?,?,?)")
QVariantList userId
userId <<user.getUserId()
query.addBindValue(userId)
QVariantList username
username <<user.getUserName()
query.addBindValue(username)
QVariantList email
email <<user.getEmail()
query.addBindValue(email)
QVariantList password
password <<user.getPassword()
query.addBindValue(password)
QVariantList city
city <<user.getCity()
query.addBindValue(city)
try
{
if (!query.execBatch())
{
qDebug() <<query.lastQuery()
qDebug() <<query.lastError()
return NULL
}
}
catch(...)
{
QMessageBox::critical(0, "Add New Node error!",
"Unable to add a new Node!/n/n"
"Click Cancel to exit.", QMessageBox::Cancel)
}
if( !UpdateConnectTable(user.getUserId(),user.getUserId(),2))
{
QMessageBox::critical(0,"","Update table Connect error")
return NULL
}
return true
}
可以使用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的准确性的。
[cpp] view plaincopyprint?/*************************************************
折线图绘制
author 周翔
2012-8-14
对外提供接口
void showData(int data)接受外部的折线数据
void setSingleUnitX(const int &value)设置x轴的单位像素
void startUpdataTimer(int msecond)定时器更新折线图
void stopUpdataTimer()关闭定时器
*************************************************/
#ifndef LINEGRAPHWIDGET_H
#define LINEGRAPHWIDGET_H
#include <QWidget>
#include <QPen>
#include <QPainter>
#include <QResizeEvent>
//#include <QDebug>
#include <QTimer>
struct point
{
int x
int y
}
class LineGraphWidget : public QWidget
{
Q_OBJECT
public:
//mix和max为折线的y轴的数据范围
explicit LineGraphWidget(int min, int max, QWidget *parent = 0)
void setSingleUnitX(const int &value) {singleUnitX = value}//设置x轴的一个单位占多少个像素,默认10
//支持定时器定时更新
void startUpdataTimer(int msecond)
void stopUpdataTimer()
signals:
//支持实时更新
void newDataCome()//有新数据到来时发出的折线图更新信号
public slots:
/**
* @brief showData
* @param adress 地址
* @param _data 数据
*/
void showData(const QString& adress,int _data)//接受来之外部的数据
/**
* @brief slt_showData 接受外部数据
* @param name 设备名
* @param _data 数据
*/
void slt_showData(ushort name,int _data)
protected:
void paintEvent(QPaintEvent *)
void resizeEvent(QResizeEvent *e)
private:
QString m_currentNodeAdress//当前显示的节点的地址
ushort m_currentNodeName//当前节点的设备名
QList<int> xList
QList<int> yList
int Counter
//窗口的长和宽
int widgetX
int widgetY
//折线图的显示范围
int rangeMin
int rangeMax
//根据窗口和范围得出的单位长,x轴,y轴
int singleUnitX
int singleUnitY
//根据窗口得出的多少个单位,x轴,y轴
int sumUnitX
int sumUnitY
point basePoint//折线图的原点
point xAxisEndPoint//X轴的终点
point yAxisEndPoint//Y轴的终点
QTimer *timer
void getSumUnitX()
void getSingleUnitY()
void initGraph()
void flush()//数据传入的节点不是现在的当前的节点的时候,刷新画面,清除所有的值
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)