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;iremoveRow(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 
#include 
#include 
#include 
#include 
#include 

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 

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(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(editor);
    dialog->setCurrentColor(QColor(value));
}

void ColorDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
    QColorDialog *dialog = static_cast(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);
}

你可能感兴趣的:(Qt,数据库,qt,数据库,delegate,data,modeling)