一、方法描述
方法一:直接加载书库的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;
}
总结