QT_TimeSchedule
来源:互联网 发布:java猜数字代码 编辑:程序博客网 时间:2024/06/05 15:23
最近想写个QT的程序,TimeSchedule。
数据库:
里面用到了数据库,很久不用,都忘了。
方便打包的话,QT 用SQLite ,这个数据库不用在PC上装,直接在QT里引入模块即可,基本操作可以看下面网址,写的很清楚
http://www.cnblogs.com/xia-weiwen/archive/2017/05/04/6806709.html
有一个要注意的是,建立数据库的时候,SQLite 是判断如果路径下的文件存在,就不会重复创建。
添加自定义控件:
listwidget 里添加
QListWidgetItem *temp ;
for (int i = 0; i < 10; i++)
{
Form *tForm=new Form();
temp = new QListWidgetItem(ui->listWidget,i);
temp->setSizeHint(QSize(200,50));
ui->listWidget->setItemWidget(temp,tForm);
}
Form这个类是一个界面类,摆好控件就能成为一个Widget 添加。待续。。。
2017/11/27 更新--------------------------------
拖了好久没弄,是因为之前数据库操作总出问题。
QSqlQuery::prepare: database not open
QSqlQuery::exec: database not open
Error: 数据库创建表失败. QSqlError("", "Driver not loaded", "Driver not loaded")我依照上面网址等给的例子创建,总是失败,不知道为什么,跟别人讨论,也说是一个玄学的东西。
昨天狠下心来弄,参考了qt里面的例子books。对比照搬了下,发现有几个需要注意的地方,否则就会产生我这种问题。
一、判断是否存在某表
QStringList tables = database.tables();
if (tables.contains("member03", Qt::CaseInsensitive))
{
qDebug() << "contains already have!";
return -1;
}
二、QsqlQuery最好使用局部变量QSqlQuery sql_query1;
sql_query1.prepare(create_sql);
if(!sql_query1.exec(create_sql))//如果已经有表了,会报错其实为什么使用局部变量我也不清楚,我之前是设置为全局变量,导致Driver not loaded
网上说的一堆什么plugin啊,什么加路径啊,全都没用。
贴一下测试数据库的demo
test_sqlite.pro
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test_sqlite
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << QSqlDatabase::drivers();//("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
if(DBconnect("my2.db")){
qDebug() << "Database Create Sucessfully!";
}
else{
qDebug() << "Database Create Failed!";
}
/*if (!QSqlDatabase::drivers().contains("QSQLITE"))
qDebug() << "no sqlite end!";
// initialize the database
QSqlError err = initDb();
if (err.type() != QSqlError::NoError) {
qDebug() << "Error: initDb 失败." << err;
return;
}*/
qDebug() << "Database end!";
}
QSqlError MainWindow::initDb()
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("my2.db");
if (!database.open()){
qDebug() << "Error: db.open失败." << sql_query.lastError();
return database.lastError();
}
QStringList tables = database.tables();
if (tables.contains("books", Qt::CaseInsensitive)
/*&& tables.contains("authors", Qt::CaseInsensitive)*/)
{
qDebug() << "contains already have!";
return QSqlError();
}
QSqlQuery q;
if (!q.exec(QLatin1String("create table books(id integer primary key, title varchar, author integer, genre integer, year integer, rating integer)")))
{
qDebug() << "Error: 数据库创建表失败." << sql_query.lastError();
return q.lastError();
}
qDebug() << "the end!";
return QSqlError();
}
MainWindow::~MainWindow()
{
database.close();
database.removeDatabase("myas.db");
delete ui;
}
bool MainWindow::DBconnect(const QString &dbName)
{
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
database = QSqlDatabase::database("qt_sql_default_connection");
qDebug() << "Database is exist!";
}
else
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName(dbName);
if (!database.open())
{
qDebug() << "Error: 数据库打开失败." << database.lastError();
return false;
}
else
{
qDebug() << "SUESSS" ;
QStringList tables = database.tables();
if (tables.contains("member03", Qt::CaseInsensitive)
/*&& tables.contains("authors", Qt::CaseInsensitive)*/)
{
qDebug() << "contains already have!";
return -1;
}
QString create_sql ="create table memb1 (id int primary key)";
QSqlQuery sql_query1;
sql_query1.prepare(create_sql);
if(!sql_query1.exec(create_sql))//如果已经有表了,会报错
//if (!sql_query.exec(QLatin1String("create table memb1 (id int primary key, name varchar(30), address varchar(30))")))
{
qDebug() << "Error: 数据库创建表失败." << sql_query1.lastError();
}
else
{
qDebug() << "Table created!";
}
}
}
qDebug() << "Database is ready!";
return true;
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QSqlDatabase>
#include <QtSql>
#include <QSqlError>
#include <QSqlQuery>
#include <QLatin1String>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
bool DBconnect(const QString &dbName);
QSqlQuery sql_query;
QSqlDatabase database;
QSqlError initDb();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
。。。待续
阅读全文
0 0
- QT_TimeSchedule
- Android Intent 使用说明
- Section1.1-Your Ride Is Here
- Part 4 Package与Import 定义一个圆类(Circle),其所在的包为bzu.info.software;定义一个圆柱类Cylinder,其所在的包为bzu.info.com;
- 信使Message间的通信
- 类的重写和类的私有变量
- QT_TimeSchedule
- 关于实现自执行数据库备份bat生成和使用
- RocketMQ源码解析-PushConsumer(2)
- Linux内核:IO设备通信的控制方式
- linux编译源码是内存不足的解决办法
- poj 3237 Tree(树链剖分)
- 【js小案例】使用ajax实现验证码功能
- web页面基础一
- Android系统APP安装流程