Qt数据库项目实例程序(各数据库通用)

这是一个关于使用Qt进行数据库操作的项目实例,重点展示了如何实现主从视图模式来浏览数据库信息,特别是与MySQL的连接。程序以汽车制造商和汽车为例,实现了添加、删除和显示汽车数据的功能。源码可在提供的链接下载,适用于各种数据库,因为Qt支持多种数据库的内置驱动。
摘要由CSDN通过智能技术生成

【Qt数据库程序实例】

首先放几张程序运行的截图:

数据库登陆界面
数据库显示界面

 

程序运行效果

【备注】源码下载地址(可以直接运行):

https://download.csdn.net/download/zqxdsy/11049683


程序部分

程序介绍:

    以主主从视图的形式展示汽车制造厂和生产汽车的关系。

    当在汽车制造商中xuan选取某制造商时,下面的汽车列表中将显示出与制造商生产的所有产品;当选中某个车型时,右边的列表将显示出该车车型和制造商的详细信息,车型的相关信息信息存储在XML的文件中。PS:各部分程序的相关注释解析会在后续过程中逐渐加上,先把代码贴上。

一.主界面布局

1.主窗口MianWindow定义主显示界面

头文件mainmainwindow.h具体代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGroupBox>
#include <QTableView>
#include <QListWidget>
#include <QLabel>
#include <QFile>
#include <QSqlRelationalTableModel>
#include <QSqlTableModel>
#include <QModelIndex>
#include <QDomNode>
#include <QDomDocument>

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    //MainWindow(QWidget *parent = 0);
    MainWindow(const QString &factoryTable,const QString &carTable,QFile *carDetails,QWidget *parent = 0);   //构造函数
    ~MainWindow();
private slots:
    void addCar();
    void changeFactory(QModelIndex index);
    void delCar();
    void showCarDetails(QModelIndex index);
    void showFactorytProfile(QModelIndex index);
private:
    QGroupBox *createCarGroupBox();
    QGroupBox *createFactoryGroupBox();
    QGroupBox *createDetailsGroupBox();
    void createMenuBar();

    QTableView *carView;
    QTableView *factoryView;

    QListWidget *attribList;

    QLabel *profileLabel;
    QLabel *titleLabel;

    void decreaseCarCount(QModelIndex index);
    void getAttribList(QDomNode car);
    QModelIndex indexOfFactory(const QString &factory);
    void readCarData();
    void removeCarFromDatabase(QModelIndex index);
    void removeCarFromFile(int id);

    QDomDocument carData;
    QFile *file;
    QSqlRelationalTableModel *carModel;
    QSqlTableModel *factoryModel;
};

#endif // MAINWINDOW_H

2.源文件mainwindow.cpp,各函数的实现

2.1 构造函数的始化和析构函数 

#include "mainwindow.h"
#include <QGridLayout>
#include <QAbstractItemView>
#include <QHeaderView>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QMessageBox>
#include <QSqlRecord>
#include "editdialog.h"
extern int uniqueCarId;
extern int uniqueFactoryId;

MainWindow::MainWindow(const QString &factoryTable,const QString &carTable,QFile *carDetails,QWidget *parent)
    : QMainWindow(parent)
{
    file = carDetails;
    readCarData();

    carModel = new QSqlRelationalTableModel(this);
    carModel->setTable(carTable);
    carModel->setRelation(2, QSqlRelation(factoryTable, "id", "manufactory"));
    carModel->select();

    factoryModel = new QSqlTableModel(this);
    factoryModel->setTable(factoryTable);
    factoryModel->select();

    QGroupBox *factory = createFactoryGroupBox();
    QGroupBox *cars = createCarGroupBox();
    QGroupBox *details = createDetailsGroupBox();
    uniqueCarId = carModel->rowCount();
    uniqueFactoryId = factoryModel->rowCount();

    //布局
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(factory, 0, 0);
    layout->addWidget(cars, 1, 0);
    layout->addWidget(details, 0, 1, 2, 1);
    layout->setColumnStretch(1, 1);
    layout->setColumnMinimumWidth(0, 500);

    QWidget *widget = new QWidget;
    widget->setLayout(layout);
    setCentralWidget(widget);
    createMenuBar();

    resize(850, 400);
    setWindowTitle(tr("主从视图"));
}

MainWindow::~MainWindow()
{
    
}

2.2 创建企业显示布局

createFactoryGroupBox()
{
    factoryView = new QTableView;
    factoryView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    factoryView->setSortingEnabled(true);
    factoryView->setSelectionBehavior(QAbstractItemView::SelectRows);
    factoryView->setSelectionMode(QAbstractItemView::SingleSelection);
    factoryView->setShowGrid(false);
    factoryView->setAlternatingRowColors(true);

    factoryView->setModel(factoryModel);
    connect(factoryView,SIGNAL(clicked (QModelIndex )),this,SLOT(changeFactory(QModelIndex)));

    QGroupBox *box = new QGroupBox(tr("汽车制造商"));
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(factoryView, 0, 0);
    box->setLayout(layout);

    return box;
}

  2.3 创建汽车显示布局

createCarGroupBox()
{
    QGroupBox *box = new QGroupBox(tr("汽车"));

    carView = new QTableView;
    carView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    carView->setSortingEnabled(true);
    carView->setSelectionBehavior(QAbstractItemView::SelectRows);
    carView->setSelectionMode(QAbstractItemView::SingleSelection);
    carView->setShowGrid(false);
    carView->verticalHeader()->hide();
    carView->setAlternatingRowColors(true);

    carView->setModel(carModel);
    connect(carView, SIGNAL(clicked(QModelIndex)),this,SLOT(showCarDetails(QModelIndex)));
    connect(carView, SIGNAL(activated(QModelIndex)),this,SLOT(showCarDetails(QModelIndex)));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(carView, 0, 0);
    box->setLayout(layout);

    return box;
}

 2.4 创建详细信息布局

createDetailsGroupBox()
{
    QGroupBox *box = new QGroupBox(tr("详细信息"));

    profileLabel = new QLabel;
    profileLabel->setWordWrap(true);
    profileLabel->setAlignment(Qt::AlignBottom);

    titleLabel = new QLabel;
    titleLabel->setWordWrap(true);
    titleLabel->setAlignment(Qt::AlignBottom);

    attribList = new QListWidget;

课程的背景 Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台 工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许 组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。 1.2、课程内容简介 该课程主要分为三个部分: 第一部分:从QT的基础理论知识入门 第二部分:通过QT媒体播放器项目实战训练巩固 第三部分:讲解QT系统移植 1.3、课程大纲 第一讲:QT简介、课程介绍、windows下QT开发环境搭建 第二讲:Linux下QT开发环境搭建1:VMWare安装及使用、Linux安装及使用 第三讲:Linux下QT开发环境搭建2:QT X11编译、安装、使用 第四讲:Linux下QT开发环境搭建3:QTEmbedded交叉编译 第五讲:Linux下C++快速串讲1:类与对象 第六讲:Linux下C++快速串讲2:继承与多态 第七讲:QT基本图形组件 第八讲:QT信号和槽 第九讲:纯代码打造QT界面 第十讲:QT消息框和对话框 第十一讲:QT菜单 第十二讲:QT工具栏和状态栏 第十三讲:PMP媒体播放器项目实战1:需求分析与关键技术 第十四讲:PMP媒体播放器项目实战2:音频播放 第十五讲:PMP媒体播放器项目实战3:音乐切换 第十六讲:PMP媒体播放器项目实战4:添加和删除播放列表 第十七讲:PMP媒体播放器项目实战5:音量控制和播放方式 第十八讲:系统移植1:系统移植概述及UBoot移植 第十九讲:系统移植2:内核和根文件系统移植 第二十讲:系统移植3:Madplay移植和QT移植 第二十一讲:PMP项目移植与远程视频监控系统 第二十二讲:项目完善:视频播放和系统设置
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值