Qt数据库操作-QSqlQueryModel 的使用

QSqlQueryModel 功能概述

QSqlQueryModel 是 QSqlTableModel 的父类。QSqlQueryModel 封装了执行 SELECT 语句从数据库查询数据的功能,但是 QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据。QSqlQueryModel 类的主要函数如下:

接口函数 功能描述
void clear() 清除数据模型,释放所有获得的数据
QSqlError lastError() 返回上次的错误,可以获取错误的类型和文本信息
QSqlQuery query() 返回当前关联的 QSqlQuery 对象
void setQuery(QSqlQuery& query) 设置一个 QSqlQuery 对象,获取数据
void setQuery(QString& query) 设置一个 SELECT 语句创建查询,获取数据
QSqlRecord record() 返回一个空记录,包含当前查询的字段信息
QSqlRecord record(int row) 返回行号为 row 的记录
int rowCount() 返回查询到的记录条数
int columnCount() 返回查询的字段个数
void setHeaderData(int section, Qt::Orientation orientation, QVariant& value) 设置表头数据,一般用于设置字段的表头标题

使用 QSqlQueryModel 作为数据模型从数据库查询数据,只需要使用 setQuery() 函数设置一个 SELECT 查询语句即可。QSqlQueryModel 可以作为 QTableView 等视图组件的数据源,也可以使用 QDataWidgetMapper 创建字段与界面组件的映射,只是查询出来的数据是不可编辑的。

使用 QSqlQueryModel 实现数据查询

实例功能

image.png

使用 QSqlQueryModel 可以从一个数据表或多个数据表里查询数据,只要设计好 SELECT 语句即可。由于 QSqlQueryModel 读出的数据是只读的,所以没有编辑保存等功能,主窗口定义如下:

class MainWindow : public QMainWindow
{
   
   
    Q_OBJECT

private:
    QLabel  *LabInfo;

    QSqlDatabase  DB; //数据库

    QSqlQueryModel  *qryModel; //数据模型

    QItemSelectionModel *theSelection; //选择模型

    QDataWidgetMapper   *dataMapper;//数据界面映射

    void    openTable();//打开数据表
    void    refreshTableView();//移动记录时刷新TableView的当前行
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

// QTableView的SelectionModel的行发生了变化,进行处理
    void on_currentRowChanged(const QModelIndex &current, const QModelIndex &previous);
///////////////////////
    void on_actOpenDB_triggered();

    void on_actRecFirst_triggered();

    void on_actRecPrevious_triggered();

    void on_actRecNext_triggered();

    void on_actRecLast_triggered();

private:
    Ui::MainWindow *ui;
};

这里定义了 QSqlQueryModel 类型的数据模型变量 qryModel,也定义了数据库、选择模型和数据界面映射的变量。refreshTableView() 函数用于记录移动后刷新 TableView 上的当前行位置。自定义槽函数 on_currentRowChanged() 在选择模型的当前变化时,处理 Photo 字段的查询与照片显示。

打开数据库

openTable() 用于查询数据,简历界面显示等具体操作,代码如下:

void MainWindow::openTable()
{
   
   //打开数据表
    qryModel=new QSqlQueryModel(this);
    qryModel->setQuery("SELECT empNo, Name, Gender, Height, Birthday, Mobile, Province, City, Department, "
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值