QT -- Qtableview 与 Qsql 应用一 创建查询

目标:创建一个数据库,添加数据,再Qtableview中显示数据

实现如下:

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QMessageBox>
#include <QStandardItemModel>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

public:
    QSqlDatabase db;
    void init();
    void initTableView();

private slots:
    bool createDb();
    bool selectDb();

public:
     QStandardItemModel* dataModel ;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <QHeaderView>
#include <QFont>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    init();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::init()
{
    connect(ui->pushButtonCreateDb,SIGNAL(clicked(bool)),this,SLOT(createDb()));
    connect(ui->pushButtonSelectDb,SIGNAL(clicked(bool)),this,SLOT(selectDb()));

    initTableView();

}
void MainWindow::initTableView()
{
    dataModel = new QStandardItemModel();

    ui->tableView->setModel(dataModel);  //绑定数据模型

    //设置列表头
    dataModel->setColumnCount(3);
    dataModel->setHeaderData(0, Qt::Horizontal, "id");
    dataModel->setHeaderData(1, Qt::Horizontal, "firstName");
    dataModel->setHeaderData(2, Qt::Horizontal, "lastName");

}

bool MainWindow::createDb()
{
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("SqlDbTest.db");
    if (!db.open()) {
        QMessageBox::critical(nullptr, QObject::tr("Cannot open database"),
                              QObject::tr("Unable to establish a database connection.\n"
                                          "This example needs SQLite support. Please read "
                                          "the Qt SQL driver documentation for information how "
                                          "to build it.\n\n"
                                          "Click Cancel to exit."), QMessageBox::Cancel);
        return false;
    }

    QSqlQuery query;
    query.exec("create table person (id int primary key, "
               "firstname varchar(20), lastname varchar(20))");
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");
    query.exec("insert into person values(103, 'Lars', 'Gordon')");
    query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
    query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");

    query.exec("create table items (id int primary key,"
               "imagefile int,"
               "itemtype varchar(20),"
               "description varchar(100))");
    query.exec("insert into items "
               "values(0, 0, 'Qt',"
               "'Qt is a full development framework with tools designed to "
               "streamline the creation of stunning applications and  "
               "amazing user interfaces for desktop, embedded and mobile "
               "platforms.')");
    query.exec("insert into items "
               "values(1, 1, 'Qt Quick',"
               "'Qt Quick is a collection of techniques designed to help "
               "developers create intuitive, modern-looking, and fluid "
               "user interfaces using a CSS & JavaScript like language.')");
    query.exec("insert into items "
               "values(2, 2, 'Qt Creator',"
               "'Qt Creator is a powerful cross-platform integrated "
               "development environment (IDE), including UI design tools "
               "and on-device debugging.')");
    query.exec("insert into items "
               "values(3, 3, 'Qt Project',"
               "'The Qt Project governs the open source development of Qt, "
               "allowing anyone wanting to contribute to join the effort "
               "through a meritocratic structure of approvers and "
               "maintainers.')");

    query.exec("create table images (itemid int, file varchar(20))");
    //         query.exec("insert into images values(0, 'images/qt-logo.png')");
    //         query.exec("insert into images values(1, 'images/qt-quick.png')");
    //         query.exec("insert into images values(2, 'images/qt-creator.png')");
    //         query.exec("insert into images values(3, 'images/qt-project.png')");

    return true;
}

bool MainWindow::selectDb()
{
    QSqlQuery query;
    int id;
    QString firstname;
    QString lastname;
    QStandardItem* itemId;
    QStandardItem* itemFirstName;
    QStandardItem*itemLastName;
    query.exec("SELECT id, firstname,lastname FROM person ");
    int i = 0;
    while (query.next())
    {

        id = query.value(0).toInt();
        firstname = query.value(1).toString();
        lastname = query.value(2).toString();

        //标准项, 用来保存一个数据项
        itemId = new QStandardItem;
        itemId->setData(id, 0);
        itemFirstName = new QStandardItem;
        itemFirstName->setData(firstname, 0);
        itemLastName = new QStandardItem;
        itemLastName->setData(lastname, 0);

        //添加设置数据
        dataModel->setItem(i, 0,itemId);
        dataModel->setItem(i, 1,itemFirstName);
        dataModel->setItem(i, 2,itemLastName);
        //设置数据居中显示
        dataModel->item(i, 0)->setTextAlignment(Qt::AlignCenter);
        //设置数据显示颜色
        dataModel->item(i, 0)->setForeground(QBrush(QColor(255, 0, 0)));
        i++;
    }
    return true;
}

实现效果:
点击创建按钮创建一个数据库文件。点击查询显示数据库中的person表
这里写图片描述

猜你喜欢

转载自blog.csdn.net/yifanmoon/article/details/80507850
今日推荐