Qt基於sqlite資料庫的管理小軟體

来源:http://www.cnblogs.com/enjoyall/archive/2016/01/27/5164107.html
-Advertisement-
Play Games

閑來無事,寫了一個基於sqlite的資料庫管理小軟體。 先上圖 中心思想就是: 創建一個資料庫 然後每一個分組對應一個數據表 然後遍歷該數據表。將名字以treewidgetItem顯示出來。添加刪除實質上是對資料庫在操作。不想寫太多功能,寫多了就成了資料庫的桌面管理版了(嘻嘻開玩笑的題外話)。 下麵


閑來無事,寫了一個基於sqlite的資料庫管理小軟體。

先上圖

 

中心思想就是:

      創建一個資料庫 然後每一個分組對應一個數據表 然後遍歷該數據表。將名字以treewidgetItem顯示出來。添加刪除實質上是對資料庫在操作。不想寫太多功能,寫多了就成了資料庫的桌面管理版了(嘻嘻開玩笑的題外話)。

下麵貼代碼:

Administrater::Administrater(QWidget *parent)
    : QMainWindow(parent)
{
    QSqlDatabase Administrater=QSqlDatabase::addDatabase("QSQLITE");
    Administrater.setDatabaseName("Administrater.db");
    Administrater.open();

    _query=QSqlQuery(Administrater);

    _query.prepare("create table goldVip(name varchar(20),sex varchar(10),ID char(20))");
    _query.exec();

    _query.prepare("create table Vip(name varchar(50),sex varchar(10),ID char(20))");
    _query.exec();

    _query.prepare("create table Coustomer(name varchar(20),sex varchar(10),ID char(20))");
    _query.exec();

    _query.prepare("select count(*) from goldVip");
    _query.exec();
    _query.next();
    _a=_query.value(0).toInt();

    _query.prepare("select count(*) from Vip");
    _query.exec();
    _query.next();
    _b=_query.value(0).toInt();

    _query.prepare("select count(*) from Coustomer");
    _query.exec();
    _query.next();
    _c=_query.value(0).toInt();

     this->setGeometry(400,200,600,400);
    _treeWidget = new QTreeWidget(this);
    _treeWidget->setColumnCount(1);
    _treeWidget->setHeaderLabel("聯繫人");

    _treeWidget->setStyleSheet("color: blue;"
                            "background-color: yellow;"
                            "selection-color: yellow;"
                            "selection-background-color: blue;");

    _Item=new QTreeWidgetItem(_treeWidget);
    _Item->setText(0,"黃金vip");
    // _Item->setCheckState(0, Qt::Checked);//覆選框
    _Item->setIcon(0,QIcon("1.ico"));
    int i=0;
    _query.prepare("select * from goldVip");
    _query.exec();
    while(i<_a)
    {
        _query.next();
        QTreeWidgetItem *Item=new QTreeWidgetItem;
        Item->setText(0,_query.value(0).toString());
        _Item->addChild(Item);
        ++i;
    }

   // connect(_Item,SIGNAL(itemClicked(QTreeWidgetItem *Item,int index)),this,
     //       SLOT(slotItem(QTreeWidgetItem *Item,int index)));

    _Item2=new QTreeWidgetItem(_treeWidget);
    _Item2->setText(0,"普通vip");
    _Item2->setIcon(0,QIcon("2.ico"));
    i=0;
    _query.prepare("select * from Vip");
    _query.exec();
    while(i<_b)
    {
        _query.next();
        QTreeWidgetItem *Item=new QTreeWidgetItem;
        Item->setText(0,_query.value(0).toString());
        _Item2->addChild(Item);
        ++i;
    }

    _Item3=new QTreeWidgetItem(_treeWidget);
    _Item3->setText(0,"普通客戶");
    _Item3->setIcon(0,QIcon("3.ico"));
    i=0;
    _query.prepare("select * from Coustomer");
    _query.exec();
    while(i<_c)
    {
        _query.next();
        QTreeWidgetItem *Item=new QTreeWidgetItem;
        Item->setText(0,_query.value(0).toString());
        _Item3->addChild(Item);
        ++i;
    }

    //Administrater.close();

    QMenuBar *menuBar=QMainWindow::menuBar();
    this->setMenuBar(menuBar);

    QAction *Action=new QAction("添加",this);
    QAction *Action2=new QAction("刪除",this);
    QAction *Action3=new QAction("查詢",this);
    QList<QAction *>_list;
    _list<<Action<<Action2<<Action3;
    menuBar->addActions(_list);

    connect(Action,SIGNAL(triggered(bool)),this,SLOT(slotAction()));
    connect(Action2,SIGNAL(triggered(bool)),this,SLOT(slotAction2()));
    connect(Action3,SIGNAL(triggered(bool)),this,SLOT(slotAction3()));

}

Administrater::~Administrater()
{


}
void Administrater::resizeEvent(QResizeEvent *)
{
    _treeWidget->setGeometry(0,0,this->width(),this->height());

}
void Administrater::slotAction2()
{
    Delete *w2=new Delete;
    w2->show();
    connect(w2,SIGNAL(delete_sucess()),this,SLOT(update_show()));
}
void Administrater::slotAction()
{
    Deal *w=new Deal;
    w->show();

    w->setStyleSheet("background-color: rgb(255, 252, 162);");

    connect(w,SIGNAL(add_sucess()),SLOT(update_show()));

}
void Administrater::slotAction3()
{
    Find *w3=new Find;
    w3->show();
}
void Administrater::update_show()
{
    delete _Item;
    delete _Item2;
    delete _Item3;

    _Item=new QTreeWidgetItem(_treeWidget);
    _Item->setText(0,"黃金vip");
    // _Item->setCheckState(0, Qt::Checked);//覆選框
    _Item->setIcon(0,QIcon("1.ico"));

    _Item2=new QTreeWidgetItem(_treeWidget);
    _Item2->setText(0,"普通vip");
    _Item2->setIcon(0,QIcon("2.ico"));

    _Item3=new QTreeWidgetItem(_treeWidget);
    _Item3->setText(0,"普通客戶");
    _Item3->setIcon(0,QIcon("3.ico"));

    _query.prepare("select count(*) from goldVip");
    _query.exec();
    _query.next();
    _a=_query.value(0).toInt();

    _query.prepare("select count(*) from Vip");
    _query.exec();
    _query.next();
    _b=_query.value(0).toInt();

    _query.prepare("select count(*) from Coustomer");
    _query.exec();
    _query.next();
    _c=_query.value(0).toInt();

   // _Item->removeChild();
    int i=0;
    _query.prepare("select * from goldVip");
    _query.exec();
    while(i<_a)
    {
        _query.next();
        QTreeWidgetItem *Item=new QTreeWidgetItem;
        Item->setText(0,_query.value(0).toString());
        _Item->addChild(Item);
        ++i;
    }

   // connect(_Item,SIGNAL(itemClicked(QTreeWidgetItem *Item,int index)),this,
     //       SLOT(slotItem(QTreeWidgetItem *Item,int index)));


    i=0;
    _query.prepare("select * from Vip");
    _query.exec();
    while(i<_b)
    {
        _query.next();
        QTreeWidgetItem *Item=new QTreeWidgetItem;
        Item->setText(0,_query.value(0).toString());
        _Item2->addChild(Item);
        ++i;
    }


    i=0;
    _query.prepare("select * from Coustomer");
    _query.exec();
    while(i<_c)
    {
        _query.next();
        QTreeWidgetItem *Item=new QTreeWidgetItem;
        Item->setText(0,_query.value(0).toString());
        _Item3->addChild(Item);
        ++i;
    }

}
#include "Deal.h"
#include "ui_Deal.h"
#include<QtSql/QSqlDatabase>
#include<QSqlQuery>
#include<QDebug>
#include<QComboBox>
#include<QMessageBox>
Deal::Deal(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Deal)
{
    ui->setupUi(this);
    connect(ui->comboBox,SIGNAL(activated(int)),
            this,SLOT(on_comboBox_activated(int d)));
    this->setStyleSheet("QLineEdit{background-color: red}");
    ui->lineEdit->setStyleSheet("background-color: rgb(188, 255, 207);");
    ui->lineEdit_2->setStyleSheet("background-color: rgb(188, 255, 207);");
    ui->lineEdit_3->setStyleSheet("background-color: rgb(188, 255, 207);");
}

Deal::~Deal()
{
    delete ui;
}

void Deal::on_pushButton_clicked()
{

     QSqlQuery query;

     QString str=ui->lineEdit->text();
     QString str2=ui->lineEdit_2->text();
     QString str3=ui->lineEdit_3->text();

     if(_Kind.isEmpty())
       {
         QMessageBox::information(this,"溫馨提示","你還沒有選者客戶分類",QMessageBox::Ok);
         return;
       }
     QString str4=QString("insert into ")+_Kind+QString(" values(")+
                          QString("\'")+str+QString("\'")+QString(",")+
                          QString("\'")+str2+QString("\'")+QString(",")+
                          QString("\'")+str3+QString("\'")+
                          QString(")");
     query.prepare(str4);
     if(query.exec())
     {
         QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
                                                 "溫馨提示","添加成功",QMessageBox::Ok);
         messageBox->show();
         _timer=new QTimer(this);
         _timer->start(1200);
         connect(_timer,SIGNAL(timeout()),messageBox,SLOT(close()));
         emit add_sucess();
     }
     else
     {
         qDebug()<<"falied";
     }


}

void Deal::on_comboBox_activated(int s)
{

    if(ui->lineEdit->text().isEmpty()|ui->lineEdit_2->text().isEmpty()|
            ui->lineEdit_3->text().isEmpty())
    {
        QMessageBox::information(this,"溫馨提示:","你輸入的資料不完整",QMessageBox::Ok);
    }
    if(s==0)
    {
        _Kind="goldVip";
    }
    else if(s==1)
    {
        _Kind="Vip";
    }
    else if(s==2)
    {
        _Kind="Coustomer";
    }

}

  

#include "Delete.h"
#include "ui_Delete.h"
#include<QSqlQuery>
#include<QDebug>
#include<QMessageBox>
#include<QTimer>
#include<QPalette>
Delete::Delete(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Delete)
{
    ui->setupUi(this);
}

Delete::~Delete()
{
    delete ui;
}

void Delete::on_pushButton_clicked()
{
     QString str=ui->lineEdit->text();
     QString str2="delete from ";
     QString str3=" where name=";
     QString str4=str2+_Str+str3+QString("\'")+str+QString("\'");
     QSqlQuery query;
     query.prepare(str4);
     if(query.exec())
     {
         QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
                                                 "溫馨提示","刪除成功",QMessageBox::Ok);
         messageBox->show();
         QTimer *timer=new QTimer(this);
         timer->start(1200);
         connect(timer,SIGNAL(timeout()),messageBox,SLOT(close()));
         emit delete_sucess();
     }
     else
     {
         QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
                                                 "溫馨提示","該分組下無該用戶",
                                                 QMessageBox::Ok);
     }
}

void Delete::on_comboBox_activated(int index)
{
    if(index==0)
    {
        _Str="goldVip";
    }
    else if(index==1)
    {
        _Str="Vip";
    }
    else if(index==2)
    {
        _Str="Coustomer";
    }
}

  

#include "Find.h"
#include "ui_Find.h"
#include<QSqlQuery>
#include<QMessageBox>
#include<QPalette>
Find::Find(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Find)
{
    ui->setupUi(this);
    _lists<<"姓名:"<<"性別:"<<"ID:";
    QPalette pal=this->palette();
    pal.setBrush(QPalette::Background,Qt::green);
    this->setPalette(pal);

}

Find::~Find()
{
    delete ui;
}

void Find::on_pushButton_clicked()
{
    if(_Str.isEmpty())
    {
        QMessageBox::information(this,"警告","你未選擇客戶類型",QMessageBox::Ok);
    }
    QString str=ui->lineEdit->text();
    QString str2="select * from "+_Str+QString(" where name=")
                  + QString("\'")+str+QString("\'");
    QSqlQuery query;
    query.prepare(str2);
    if(query.exec())
    {
        query.next();
        if(query.value(0).toString().isEmpty())
        {
            QMessageBox::warning(this,"警告","該資料庫查無此人",QMessageBox::Ok);
            return;
        }
        while(!query.value(0).toString().isEmpty())
        {
            for(int i=0;i<3;++i)
            {

              ui->textBrowser->append(_lists.at(i)+query.value(i).toString());

            }
            query.next();
         }

    }
    else
    {
        QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
                                                "溫馨提示","該分組下無該用戶",
                                                QMessageBox::Ok);
    }
}

void Find::on_comboBox_activated(int index)
{

    if(index==0)
    {
        _Str="goldVip";
    }
    else if(index==1)
    {
        _Str="Vip";
    }
    else if(index==2)
    {
        _Str="Coustomer";
    }
}

 順便提一句 sqlite是沒有表頭的 所以用query去提取數據時 先next下才有數據的哈。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Visual Studio International Pack 包含一組類庫,該類庫擴展了.NET Framework對全球化軟體開發的支持。使用該類庫提供的類,.NET 開發人員可以更方便的創建支持多文化多語言的軟體應用下載地址:下載地址(1) (ChnCharInfo.dll)Simplifi...
  • 目前來說,使用JSON保存數據比較方便,前臺可以不用Test.aspx 頁面,可以直接用Html頁面,使用.aspx頁面的弊端就不在這裡熬述。 具體步驟如下: 1、新建一個Html頁面,命名為Test.html 1 <script type="text/javascript" src="easyui
  • 一般在網上搜C++如何調用C#的函數,出來的結果都是做成COM組件,但是這種方法dll安裝麻煩,需要註冊COM組件,需要管理員許可權,調試麻煩,經常需要重啟機器,反正有諸多不便。 然後在看《CLR via C#》時看到一種方法,可以免去這種苦惱。少廢話,先上代碼。C#類庫的:namespace Cl....
  • C#設計模式(1)——單例模式(Singleton)C#設計模式(2)——簡單工廠模式(Factory )C#設計模式(3)——工廠方法模式(Factory Method)C#設計模式(4)——抽象工廠模式(Abstract Factory)C#設計模式(5)——建造者模式(Builder Patt...
  • 上學期做過一個java web的網站,初步瞭解了java寫網站後臺的流程,但是個人代碼的封裝性很差,完成後也沒有再去改動,這幾天會花時間整理一下把博客寫出來。 最近開始學習android的開發,用的是android studio,由於AVD和genymotion都用不上,所以用的真機調試,昨天發現掛
  • Python前世今生 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程式,作為ABC語言的一種繼承。 python的種類 Cpython python的官方版,使用C語言實現,使用最為
  • 事務工具在回滾時,遇到保存點停止回滾。(準確地將是指定的保存點,我不打算寫論文,差不多就行。:)要想實現上述功能,必須:……
  • 如何優化頁面響應時間: 動態頁面靜態化 優化資料庫 使用負載均衡 使用緩存 如果頁面中的一些內容不經常改動,可以使用動態頁面靜態化。好處是:減少伺服器腳本的計算時間;降低伺服器的響應時間。 1、動態URL地址設置靜態形式(偽靜態) 例如:http://xxx.com/index.php?c=play
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...