Qt使用QSqlTableModel图形化显示数据库

        Qt提供了QSqlTableModel来将数据库以表格的形式显示在界面上。

示例代码:
 

//初始化
QSqlTableModel *model;
QTableView *view;
ColorDelegate colorDelegate;
model = new QSqlTableModel(this);
model->setTable("tableName");
view = new QTableView;
view->setModel(model);
view->setItemDelegateForColumn(3,&colorDelegate);//设置代理,弹出控件,比如颜色对话框
view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
model->select();
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
//添加记录
QSqlRecord record = model->record();
int row = model->rowCount();
model->insertRecord(row,record);
//删除记录
QItemSelectionModel *selectModel = view->selectionModel();
QModelIndexList list = selectModel->selectedRows();
for(int i=0;i<list.size();i++){
    model->removeRow(list.at(i).row());
}
//确定更改
model->submitAll();
//取消更改
model->revertAll();
model->submitAll();
//查询过滤
QString sql = "address = 'shanghai'";
model->setFilter(sql);
model->select();

        如果针对某行或某列设置代理,使其选择数据弹出颜色对话框,日期对话框等自定义对话框选择数据,可以继承QItemDelegate子类化对象,并重写函数createEditor,setEditorData,setModelData,updateEditorGeometry。

示例代码:
 

//colordelegate.h
#include <QWidget>
#include <QItemDelegate>
#include <QModelIndex>
#include <QObject>
#include <QSize>
#include <QColorDialog>

class ColorDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    QString text;
    ColorDelegate(QObject *parent = 0);
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};

//colordelegate.cpp
#include "colordelegate.h"
#include <QComboBox>

ColorDelegate::ColorDelegate(QObject *parent) : QItemDelegate(parent)
{
}

QWidget *ColorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{
    QColorDialog *editor = new QColorDialog(parent);
    editor->installEventFilter(const_cast<ColorDelegate*>(this));
    return editor;
}

void ColorDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const{
    QString value = index.model()->data(index,Qt::EditRole).toString();
    QColorDialog *dialog = static_cast<QColorDialog*>(editor);
    dialog->setCurrentColor(QColor(value));
}

void ColorDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
    QColorDialog *dialog = static_cast<QColorDialog*>(editor);
    QColor value = dialog->currentColor();
    model->setData(index,value,Qt::EditRole);
}

void ColorDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const{
    editor->setGeometry(option.rect);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值