一、方法描述

方法一:直接加载书库的table
方法二:将表加载读到list中,再加载到Qt界面的tableview控件中

二、使用步骤

1.引入库

代码如下(示例)
.pro文件

QT       += core gui sql

头文件

#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include "QSqlError"

2.读入数据

方法一:

代码如下(示例):

 bool MainWindow::addtable()
 {
     QSqlDatabase database;
     database = QSqlDatabase::addDatabase("QMYSQL");
     database.setHostName("localhost");
     database.setPort(3306);
     database.setDatabaseName("mysqlname");
     database.setUserName("root");
     database.setPassword("123456");
     if(!database.open())
     {
         return false;
     }
     QSqlTableModel *model  = new QSqlTableModel(this);
     model->setTable("tab_printer_list");
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();
     ui->tableView->setModel(model);
     ui->tableView->horizontalHeader()->setStyleSheet("QHeaderView::section {"
                                                        "color: black;padding-left: 4px;border: 1px solid #6c6c6c;}");
     ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
     ui->tableView->setColumnWidth(4,359);
     ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
     ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);
    return 1;
 }

**这里注意的是“database = QSqlDatabase::addDatabase(“QMYSQL”);”只能使用默认连接不能加连接名字,具体原因不详,而且这个是直接将数据库中的表加载出来,格式什么的还需后面设置


方法二:

#define  COLUMN_STUDENTS_ID 0
#define  COLUMN_STUDENTS_NAME 1
#define  COLUMN_STUDENTS_AGE 2
#define  COLUMN_STUDENTS_OTHER 3

struct ststudentItem
{
   QString name;
   QString id;
   QString age;
   QString other;
};
void Page_Data::listAllData()
{
    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL", "connectionname");
    QList<datatype> m_datalist;
	db.setHostName("127.0.0.1");
	db.setPort(3306);
	db.setDatabaseName("dbname");
	db.setUserName("root");
    db.setPassword("123456");
    m_datalist.clear();
    db.getstudentList(m_datalist);
    QStandardItemModel*  datamodel = new QStandardItemModel;
    setTableHead(datamodel );
    setTableItem(m_datalist,datamodel);
    ui->tableView->setModel(datamodel);
    setupModels();
    m_nSlctRow=-1;
}

void Page_Data::setTableHead(QStandardItemModel *pModel)
{
   pModel->setHorizontalHeaderItem(COLUMN_STUDENTS_ID , new QStandardItem("学号") );
    pModel->setHorizontalHeaderItem(COLUMN_STUDENTS_NAME , new QStandardItem("姓名"));
    pModel->setHorizontalHeaderItem(COLUMN_STUDENTS_AGE , new QStandardItem("年龄"));
    pModel->setHorizontalHeaderItem(COLUMN_STUDENTS_OTHER , new QStandardItem("其他"));
}

void Page_Data::setTableItem(QList<ststudentItem> list,QStandardItemModel *model)
{
    QStandardItem   *aItem;
    for (int i = 0;i<list.size();i++) {
        aItem=new QStandardItem(list[i].id);
        model->setItem(i,COLUMN_STUDENTS_ID ,aItem);
        aItem=new QStandardItem(list[i].name);
        model->setItem(i,COLUMN_STUDENTS_NAME ,aItem);
        aItem=new QStandardItem(list[i].age);
        model->setItem(i,COLUMN_STUDENTS_AGE ,aItem);
        aItem=new QStandardItem(list[i].other);
        model->setItem(i,COLUMN_STUDENTS_OTHER ,aItem);       
    }
}

DBResult Page_Data::getMonitorPrinterList(QList<ststudentItem>& stdlist)
{
    if (!m_database.open())
    {
        qDebug() << "unable to open database";
        return DBResult::openfailled;
    }
    QString sql = "select * from tab_students_baseinfo";
    QSqlQuery query;
    query = QSqlQuery::QSqlQuery(m_database);
    query.prepare(sql);

    if (!query.exec())
    {
        m_database.close();
        return DBResult::execfailled;
    }

    while (query.next())
    {
        ststudentItem stItem;
        stItem.id = query.value("id").toInt();
        stItem.name = query.value("name").toString();
        stItem.age= query.value("age").toString();
        stItem.other= query.value("other").toDate();
  stdlist.append(stItem);
    db.close();
    return DBResult::ok;
}

总结
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐