QT学习:根据数据库的内容动态添加Button
来源:互联网 发布:高港区人民法院淘宝 编辑:程序博客网 时间:2024/06/02 07:29
如果需要对数据库操作,必须在.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;
}
}
- QT学习:根据数据库的内容动态添加Button
- 动态添加Button并包裹内容
- 根据Sqlite数据库的内容来动态加载NGUI控件
- 根据复选框的内容动态的给新的table添加内容
- vc++ 根据数据库动态添加菜单项
- Ultratree通过数据库的内容动态添加树
- button添加内容的另类方法
- 根据所选择的select选项实现内容的动态添加与组合
- 使用jQuery动态创建一个表格,根据用户数输入的内容添加一行数据
- 使用jQuery动态创建一个表格,根据用户数输入的内容添加一行数据
- 动态添加的Button不显示字体
- 动态添加带图标的Button
- 【实验】button的使用、动态添加组件
- 学习记录-Qt窗口控件的动态添加和删除
- 根据文本框的内容,动态设置控件
- C# 动态添加Button
- 动态添加button按钮
- 01-学习iOS的动态添加Button和监听UIAlertView按钮的点击事件()
- 云风的《代码大全》读书笔记
- Navicat 8.0 MySQL的注册码
- 编程世界中惯性的力量
- Qt4访问sqlite数据库
- 一个人的成功取决于晚上的8点至10点--经典语录
- QT学习:根据数据库的内容动态添加Button
- 启动eclipse是报 no java virtual machine was found after searching the following location
- Linux下创建DB2实例
- 从零开始搭建nutch搜索引擎
- win2003此域的推荐安全级别是“安全级-高”,无法修改的解决方法
- 可视化HTML编辑器 CKEditor
- 白色衣服越穿越白的窍门
- 创建表空间语句
- java集群