⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8.8 实例:数据库基本浏览.txt

📁 qt的源代码
💻 TXT
字号:
#ifndef EDITABLESQLMODEL_H
 #define EDITABLESQLMODEL_H
 #include <QSqlQueryModel>
 class EditableSqlModel : public QSqlQueryModel
 {
     Q_OBJECT
 public:
     EditableSqlModel(QObject *parent = 0);
     Qt::ItemFlags flags(const QModelIndex &index) const;
     bool setData(const QModelIndex &index, const QVariant &value, int role);
 private:
     bool setFirstName(int personId, const QString &firstName);
     bool setLastName(int personId, const QString &lastName);
     void refresh();
 };
 #endif
#include <QtSql>
 #include "editablesqlmodel.h"
 EditableSqlModel::EditableSqlModel(QObject *parent)
     : QSqlQueryModel(parent)
 {
 }
 Qt::ItemFlags EditableSqlModel::flags(
         const QModelIndex &index) const
 {
     Qt::ItemFlags flags = QSqlQueryModel::flags(index);
     if (index.column() == 1 || index.column() == 2)
         flags |= Qt::ItemIsEditable;
     return flags;
 }
 bool EditableSqlModel::setData(const QModelIndex &index, const QVariant &value, int 
/* role */)
 {
     if (index.column() < 1 || index.column() > 2)
         return false;
     QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0);
     int id = data(primaryKeyIndex).toInt();
     clear();
     bool ok;
     if (index.column() == 1) {
         ok = setFirstName(id, value.toString());
     } else {
         ok = setLastName(id, value.toString());
     }
     refresh();
     return ok;
 }
 void EditableSqlModel::refresh()
 {
     setQuery("select * from person");
     setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
     setHeaderData(1, Qt::Horizontal, QObject::tr("First name"));
     setHeaderData(2, Qt::Horizontal, QObject::tr("Last name"));
 }
 bool EditableSqlModel::setFirstName(int personId, const QString &firstName)
 {
     QSqlQuery query;
     query.prepare("update person set firstname = ? where id = ?");
     query.addBindValue(firstName);
     query.addBindValue(personId);
     return query.exec();
 }
 bool EditableSqlModel::setLastName(int personId, const QString &lastName)
 {
     QSqlQuery query;
     query.prepare("update person set lastname = ? where id = ?");
     query.addBindValue(lastName);
     query.addBindValue(personId);
     return query.exec();
 }
#ifndef CUSTOMSQLMODEL_H
 #define CUSTOMSQLMODEL_H
 #include <QSqlQueryModel>
 class CustomSqlModel : public QSqlQueryModel
 {
     Q_OBJECT
 public:
     CustomSqlModel(QObject *parent = 0);
     QVariant data(const QModelIndex &item, int role) const;
 };
 #endif
 #include <QtGui>
 #include "customsqlmodel.h"
 CustomSqlModel::CustomSqlModel(QObject *parent)
     : QSqlQueryModel(parent)
 {
 }
 QVariant CustomSqlModel::data(const QModelIndex &index, int role) const
 {
     QVariant value = QSqlQueryModel::data(index, role);
     if (value.isValid() && role == Qt::DisplayRole) {
         if (index.column() == 0)
             return value.toString().prepend("#");
         else if (index.column() == 2)
             return value.toString().toUpper();
     }
     if (role == Qt::TextColorRole && index.column() == 1)
         return qVariantFromValue(QColor(Qt::blue));
     return value;
 }
 #include <QtGui>
 #include "../connection.h"
 #include "customsqlmodel.h"
 #include "editablesqlmodel.h"
 void initializeModel(QSqlQueryModel *model)
 {
     model->setQuery("select * from person");
     model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
     model->setHeaderData(1, Qt::Horizontal, QObject::tr("First name"));
     model->setHeaderData(2, Qt::Horizontal, QObject::tr("Last name"));
 }
 void createView(const QString &title, QSqlQueryModel *model)
 {
     static int offset = 0;
     QTableView *view = new QTableView;
     view->setModel(model);
     view->setWindowTitle(title);
     view->move(100 + offset, 100 + offset);
     offset += 20;
     view->show();
 }
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     if (!createConnection())
         return 1;
     QSqlQueryModel plainModel;
     EditableSqlModel editableModel;
     CustomSqlModel customModel;
     initializeModel(&plainModel);
     initializeModel(&editableModel);
     initializeModel(&customModel);
     createView(QObject::tr("Plain Query Model"), &plainModel);
     createView(QObject::tr("Editable Query Model"), &editableModel);
     createView(QObject::tr("Custom Query Model"), &customModel);
     return app.exec();
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -