zoukankan      html  css  js  c++  java
  • QT学习:根据数据库的内容动态添加Button

    如果需要对数据库操作,必须在.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;
        }
    }

  • 相关阅读:
    javascript模拟jQuery封装委托事件,兼容IE
    javascript事件有哪些?javascript的监听事件
    javascript阻止事件冒泡的兼容写法及其相关示例
    Spring的特点
    异常以及为什么要学异常
    Windows下干活儿辅助软件
    Oracle EBS SLA 详解
    EBS获取并发程序Trace File
    EBS Custom Password Rules
    Oracle PLSQL读取(解析)Excel文档
  • 原文地址:https://www.cnblogs.com/bennylam/p/1691782.html
Copyright © 2011-2022 走看看