如果需要对数据库操作,必须在.pro文件中加入:
QT +=sql
代码如下:
#include <QString> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QSqlDriver> #include <QDateTime> #include <QDebug> #include <QPushButton> #include <QVBoxLayout> #include <QToolBox>
#include "mainwindow.h" #include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //下面进行数据库的设置 int i; QVBoxLayout *layInstruct = new QVBoxLayout;//ToolBox的Layout QToolBox *tbInstruct=new QToolBox(); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //使用sqlite数据库驱动 db.setDatabaseName("G:\\SerialInstruct.db3"); //我们之前建立的数据库 if (db.open())//尝试连接数据库 { //已经成功连上数据库 QSqlQuery query; //新建一个查询的实例 if (query.exec("select * from UnitData")) //尝试列出 student 表的所有记录 { //本次查询成功 int numRows = 0; //询问数据库驱动,是否驱动含有某种特性 if (db.driver()->hasFeature(QSqlDriver::QuerySize)) { numRows = query.size(); //如果支持结果影响的行数,那么直接记录下来 } else { query.last(); //否则定位到结果最后,qt 文档说,这个方法非常慢 numRows = query.at() + 1; query.seek(-1); } QString name, age; i=0; while(query.next()) { //定位结果到下一条记录 name = query.value(0).toString(); age = query.value(1).toString(); QString result = name + " " + age; QWidget *pages=new QWidget(); tbInstruct->addItem(pages,age); QSqlQuery qryInstruct;//查询子表内容,用于创建Button if (qryInstruct.exec(QString("Select ID,Description from InstructList Where UnitID=%1").arg(i+1))) { tbInstruct->setCurrentIndex(i); QVBoxLayout *layout = new QVBoxLayout;//建立一个坚排的规则
while(qryInstruct.next()) { QString sID,sCaption; sID=qryInstruct.value(0).toString(); sCaption=qryInstruct.value(1).toString(); QPushButton *button = new QPushButton(sCaption); button->setAccessibleDescription(sID); button->setCheckable(true); button->setAutoExclusive(true); layout->addWidget(button);//把Button放入Layout中 } layout->setSpacing(0); pages->setLayout(layout); } i=i+1; } //ui->toolBox->removeItem(0); tbInstruct->setCurrentIndex(0); layInstruct->addWidget(tbInstruct); layInstruct->setSpacing(0); ui->centralWidget->setLayout(layInstruct); } else { //如果查询失败,用下面的方法得到具体数据库返回的原因 QSqlError error = query.lastError(); //display.append("From mysql database: " + error.databaseText()); } } else { //打开数据库失败,显示数据库返回的失败描述 //display.append("cannot open database."); //display.append("Reason: " + db.lastError().databaseText()); } }
MainWindow::~MainWindow() { delete ui; }
void MainWindow::changeEvent(QEvent *e) { QMainWindow::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } }
转载于:https://www.cnblogs.com/bennylam/archive/2010/03/22/1691782.html
