一起看代码来玩玩QT之18 database(four 向QtableView 添加代理view->setItemDelegate ,让代理作一些东西)
来源:互联网 发布:淘宝哪家美妆店是正品 编辑:程序博客网 时间:2024/05/24 07:28
Widget04.h
#ifndef WIDGET04_H#define WIDGET04_H#include <QObject>#include <QSqlTableModel>#include <QTableView> // show table#include <QItemDelegate>#include <QComboBox>class TUserDelegate : public QItemDelegate{ QWidget *createEditor(QWidget * parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.column() == 0) return NULL; if(index.column() == 3) { QComboBox* combo = new QComboBox(parent); combo->addItem("男"); combo->addItem("女"); return combo; } return QItemDelegate::createEditor(parent, option, index); }};#if 0 //////////// column 0;class ReadOnlyDelegate : public QItemDelegate{ QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const { return NULL; }};class GenderDelegate : public QItemDelegate{public: QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const { QComboBox* combo = new QComboBox(parent); combo->addItem("男"); combo->addItem("女"); return combo; }};#endif//////////////////column 3 sexclass MyTableModel : public QSqlTableModel{public: QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const { // if(role == Qt::DisplayRole) // return QSqlTableModel::data(idx, role); if(idx.column() != 3) return QSqlTableModel::data(idx, role); QVariant var = QSqlTableModel::data(idx, role); //Qvariant 万能类型 if(var == 0) { return "女"; } return "男"; } bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) { if(index.column() != 3) return QSqlTableModel::setData(index, value, role); if(value == "男") return QSqlTableModel::setData(index, 1, role); return QSqlTableModel::setData(index, 0, role); }};class Widget04 : public QWidget{ Q_OBJECTpublic: explicit Widget04(QWidget *parent = 0); MyTableModel* _model; QTableView* _view;signals:public slots: void slotSubmitClicked(); void slotDelClicked(); void slotAddClicked();};#endif // WIDGET04_H
Widget04.cpp
#include "Widget04.h"#include <QVBoxLayout>#include <QHBoxLayout>#include <QPushButton>#include <QMessageBox>#include <QSqlError>#include <QSqlDatabase>#include <QSqlRecord>Widget04::Widget04(QWidget *parent) : QWidget(parent){ _model = new MyTableModel; _model->setTable("tuser"); _model->select(); _model->setEditStrategy(QSqlTableModel::OnManualSubmit); _model->setHeaderData(0, Qt::Horizontal, "编号"); _model->setHeaderData(1, Qt::Horizontal, "用户名"); _model->setHeaderData(2, Qt::Horizontal, "密码"); _model->setHeaderData(3, Qt::Horizontal, "性别"); _view = new QTableView; _view->setModel(_model);// _view->hideColumn(2); // _view->setItemDelegateForColumn(3, new GenderDelegate); // _view->setItemDelegateForColumn(0, new ReadOnlyDelegate); _view->setItemDelegate(new TUserDelegate); //添加 代理 QVBoxLayout* lay = new QVBoxLayout(this); lay->addWidget(_view); QHBoxLayout* hBox = new QHBoxLayout; lay->addLayout(hBox); hBox->addStretch(); QPushButton* del = new QPushButton("del"); connect(del, SIGNAL(clicked()), this, SLOT(slotDelClicked())); hBox->addWidget(del); QPushButton* submit = new QPushButton("submit"); connect(submit, SIGNAL(clicked()), this, SLOT(slotSubmitClicked())); hBox->addWidget(submit); QPushButton* add = new QPushButton("add"); connect(add, SIGNAL(clicked()), this, SLOT(slotAddClicked())); hBox->addWidget(add);}void Widget04::slotAddClicked(){ QSqlRecord record = _model->record(); _model->insertRecord(-1, record);}void Widget04::slotDelClicked(){ // 通过_view去获取被选中的部分的数据model QItemSelectionModel * selectModel = _view->selectionModel();// 通过选中的数据结构,获取这些格子的ModelIndex QModelIndexList selectList = selectModel->selectedIndexes(); QList<int> delRow; // 遍历这些格子,获取格子所在行,因为可能存在相同的行,所以要去重 for(int i=0; i<selectList.size(); ++i) { QModelIndex index = selectList.at(i); // _model->removeRow(index.row()); delRow << index.row(); } while(delRow.size() > 0) { int row = delRow.at(0); delRow.removeAll(row); _model->removeRow(row); } _model->submitAll();}void Widget04::slotSubmitClicked(){ if(!_model->submitAll()) { QMessageBox::critical(this, "Error", QSqlDatabase().lastError().text()); }}
main.cpp
#include <QApplication>#include "Widget04.h"#include <QSqlDatabase>#include <QSqlError>#include <QDebug>#include "Contact.h"int main(int argc, char*argv[]){ QApplication app(argc, argv); /* QSQLITE QODBC QPLSQL */ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setUserName("root"); db.setPassword("iamxgl"); db.setDatabaseName("d0718"); bool bRet = db.open(); if(bRet == false) { qDebug() << "error open database" << db.lastError().text(); exit(0); } qDebug() << "open database success"; Widget04 w; w.show(); return app.exec();}
1 0
- 一起看代码来玩玩QT之18 database(four 向QtableView 添加代理view->setItemDelegate ,让代理作一些东西)
- 一起看代码来玩玩QT之18 database(five 用lineEidt 对database 进行高级别的查询,使QTableView显示所需的数据)
- 一起看代码来玩玩QT之18 database (last QSqlQueryModel 对数据库进行操作(只查不能改)QTableModel 可改,但是QSqlQueryModel也可以添加代理等功)
- 一起看代码来玩玩QT之18 QSqlDatabase (three 将database 通过 QTableView显示到界面上,并且增删改查
- 一起看代码来玩玩QT之18QSqlDatabase(two 用QSqlTableModel 来操作database this way very nice)
- 一起看代码来玩玩QT之01Hello world
- 一起看代码来玩玩QT之02LineEdit
- 一起看代码来玩玩QT之03coordinate
- 一起看代码来玩玩QT之04 Layout
- 一起看代码来玩玩QT之05 Controls
- 一起看代码来玩玩QT之06Event
- 一起看代码来玩玩QT之07 Painter
- 一起看代码来玩玩QT之10 Graphics
- 一起看代码来玩玩QT之11 Dialog
- 一起看代码来玩玩QT之17 json
- 一起看代码来玩玩QT之19 Process(进程)
- 一起看代码来玩玩QT之21 HttpClient
- 一起看代码来玩玩QT之23 audioRecord
- JavaWeb Servlet
- 清除系统日志的shell脚本
- 推送总结
- Box2D引擎初探
- ZABBIX3.0.1安装尝鲜
- 一起看代码来玩玩QT之18 database(four 向QtableView 添加代理view->setItemDelegate ,让代理作一些东西)
- java解析XML的四种方法的学习与比较
- nyoj120 poj1236
- 数据库SQL优化大总结之 百万级数据库优化方案
- 例题7-1 UVa725 Division(枚举)
- 82——java监听者模式
- (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二
- mysql 中查出多条记录中的不同type值的pv字段的差值
- Neat Sayings | WPI