Qt數(shù)據(jù)庫應(yīng)用之超級(jí)自定義委托_第1頁
Qt數(shù)據(jù)庫應(yīng)用之超級(jí)自定義委托_第2頁
Qt數(shù)據(jù)庫應(yīng)用之超級(jí)自定義委托_第3頁
Qt數(shù)據(jù)庫應(yīng)用之超級(jí)自定義委托_第4頁
Qt數(shù)據(jù)庫應(yīng)用之超級(jí)自定義委托_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Qt數(shù)據(jù)庫應(yīng)用之超級(jí)自定義委托目錄一、前言二、功能特點(diǎn)三、體驗(yàn)地址四、效果圖五、相關(guān)代碼

一、前言

在QTableView、QTreeView以及對(duì)于衍生的QTableWidget、QTreeWidget類中,需要用到自定義委托的情形很多,比如提供下拉框選擇,進(jìn)度條展示下載進(jìn)度啥的,默認(rèn)的單元格是沒有這些效果的,需要自己單獨(dú)用委托的形式來展示,自定義委托一般有兩種UI形式,一種是單元格一直顯示對(duì)應(yīng)的委托控件比如復(fù)選框、按鈕、進(jìn)度條等,一種是用戶鼠標(biāo)按下才顯示對(duì)應(yīng)的委托控件,鼠標(biāo)離開自動(dòng)恢復(fù)原有單元格的形式。

在設(shè)計(jì)這個(gè)委托類的時(shí)候,綜合考慮了很多應(yīng)用場景需求,例如復(fù)選框、文本框、下拉框、日期框、微調(diào)框、進(jìn)度條等都支持,而且就合并在一個(gè)類中,方便直接new使用,通過函數(shù)指定不同的委托類型即可,也經(jīng)過大量的項(xiàng)目實(shí)戰(zhàn)應(yīng)用,逐步完善到現(xiàn)在的程度。

自定義委托全家桶特點(diǎn):

可設(shè)置多種委托類型,例如復(fù)選框、文本框、下拉框、日期框、微調(diào)框、進(jìn)度條等??稍O(shè)置是否密文顯示,一般用于文本框。可設(shè)置是否允許編輯,一般用于下拉框。可設(shè)置是否禁用,一般用來禁用某列??稍O(shè)置數(shù)據(jù)集合,比如下拉框數(shù)據(jù)集合。提供值變化信號(hào),比方說下拉框值改動(dòng)觸發(fā)。可設(shè)置數(shù)據(jù)校驗(yàn)自動(dòng)產(chǎn)生不同的圖標(biāo)。支持設(shè)置校驗(yàn)列、校驗(yàn)規(guī)則、校驗(yàn)值、校驗(yàn)成功圖標(biāo)、校驗(yàn)失敗圖標(biāo)、圖標(biāo)大小??稍O(shè)置校驗(yàn)數(shù)據(jù)產(chǎn)生不同的背景顏色和文字顏色。校驗(yàn)規(guī)則支持====!=contains,非常豐富。復(fù)選框自動(dòng)居中而不是左側(cè),切換選中狀態(tài)發(fā)送對(duì)應(yīng)的信號(hào)。可設(shè)置顏色委托,自動(dòng)根據(jù)顏色值繪制背景顏色,自動(dòng)設(shè)置最佳文本顏色??稍O(shè)置按鈕委托,自動(dòng)根據(jù)值生成多個(gè)按鈕,按鈕按下發(fā)送對(duì)應(yīng)的信號(hào)。當(dāng)設(shè)置了委托列時(shí)自動(dòng)繪制選中背景色和文字顏色。可設(shè)置關(guān)鍵字對(duì)照表繪制關(guān)鍵字比如原始數(shù)據(jù)是0-禁用1-啟用。可設(shè)置復(fù)選框?qū)?yīng)的映射選中不選中關(guān)鍵字。根據(jù)不同的委托類型繪制,可以依葫蘆畫瓢自行增加自己的委托。所有功能封裝成1個(gè)類,核心代碼不到500行,使用極其方便友好。

自定義委托全家桶應(yīng)用場景:

某個(gè)字段需要提供下拉框進(jìn)行選擇,下拉框可選是否允許編輯。某個(gè)字段需要提供密碼框進(jìn)行輸入,密文顯示字段值。某個(gè)字段需要提供日期框下拉選擇日期時(shí)間。某個(gè)字段需要提供微調(diào)框設(shè)定值。某個(gè)字段需要提供進(jìn)度條顯示字段值。某個(gè)字段列需要禁用。各種委托控件可以設(shè)置初始的數(shù)據(jù)集合,比如下拉框。各種委托控件在值發(fā)生變化的時(shí)候發(fā)出valuechanged信號(hào),比如下拉框選擇聲音文件的時(shí)候進(jìn)行播放試聽,微調(diào)框值改變的時(shí)候聯(lián)動(dòng)其他控件進(jìn)行處理等。某個(gè)字段根據(jù)設(shè)定的規(guī)則進(jìn)行數(shù)據(jù)校驗(yàn)自動(dòng)產(chǎn)生不同的圖標(biāo)顯示,比如報(bào)警紅色圖標(biāo)/正常綠色圖標(biāo),一目了然。同時(shí)可設(shè)置校驗(yàn)列/校驗(yàn)規(guī)則/校驗(yàn)值/校驗(yàn)成功圖標(biāo)/校驗(yàn)失敗圖標(biāo)/圖標(biāo)大小。某個(gè)字段根據(jù)設(shè)定的規(guī)則進(jìn)行數(shù)據(jù)校驗(yàn)自動(dòng)繪制不同的背景顏色醒目顯示,可設(shè)定規(guī)則包括====!=contains,可設(shè)置符合要求的內(nèi)容文字顏色/背景顏色。某個(gè)字段需要根據(jù)內(nèi)容顯示復(fù)選框(自動(dòng)居中),比如內(nèi)容是0/禁用/false等復(fù)選框不選中,1/啟用/true等復(fù)選框選中,具體選中不選中對(duì)應(yīng)的內(nèi)容可自定義。某個(gè)字段需要根據(jù)內(nèi)容重新替換顯示成自定義的內(nèi)容,比如值是0而需要顯示成不符合字樣,1顯示成符合字樣。對(duì)應(yīng)的內(nèi)容替換規(guī)則可設(shè)置關(guān)鍵字對(duì)照表。某個(gè)字段需要根據(jù)顏色值顯示對(duì)應(yīng)的顏色,同時(shí)可以單擊選中進(jìn)行顏色選擇。某列需要顯示操作按鈕,按鈕的個(gè)數(shù)/文字集合可設(shè)定,根據(jù)設(shè)定的文字集合平分寬度繪制按鈕,單擊某個(gè)按鈕發(fā)送對(duì)應(yīng)的按鈕單擊信號(hào),帶按鈕索引以及行列,用于用戶自行處理。一個(gè)類通用所有需要委托的場景,相當(dāng)于一個(gè)輪子用在所有項(xiàng)目中,不需要單獨(dú)再去寫不同的委托類。一個(gè)類通用所有支持委托的控件,比如QTableView/QTableWidget/QListView/QTreeWidget/QListWidget等。

Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)

二、功能特點(diǎn)

同時(shí)支持多種數(shù)據(jù)庫比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金倉等。一個(gè)數(shù)據(jù)庫類即可管理本地?cái)?shù)據(jù)庫通信,也支持遠(yuǎn)程數(shù)據(jù)庫通信等。數(shù)據(jù)庫線程支持執(zhí)行各種sql語句,包括單條和批量。組件中的所有類打印信息、錯(cuò)誤信息、執(zhí)行結(jié)果都信號(hào)發(fā)出去。集成數(shù)據(jù)庫通用翻頁類(負(fù)責(zé)具體處理邏輯),搭配分頁導(dǎo)航控件(負(fù)責(zé)外觀),形成超級(jí)牛逼的翻頁控件。集成數(shù)據(jù)庫自動(dòng)清理類,設(shè)定最大記錄數(shù)后臺(tái)自動(dòng)清理早期數(shù)據(jù)。集成自定義委托類,支持復(fù)選框、文本框、下拉框、日期框、微調(diào)框、進(jìn)度條等。同時(shí)支持Qt4-Qt6,親測(cè)Qt4.6到Qt6.3任意版本,任意系統(tǒng)和編譯器。本組件無故障360天7乘24小時(shí)運(yùn)行在至少上萬個(gè)現(xiàn)場,商業(yè)級(jí)別品質(zhì)保證。每個(gè)類都對(duì)應(yīng)完整詳細(xì)的使用示例,注釋詳細(xì),非常適合閱讀學(xué)習(xí)??梢宰鳛楠?dú)立的程序運(yùn)行,比如自動(dòng)清理早期數(shù)據(jù),同步數(shù)據(jù)到云端。全部線程處理,不卡界面,自動(dòng)重連數(shù)據(jù)庫。普通測(cè)試情況,sqlite數(shù)據(jù)庫,數(shù)據(jù)庫發(fā)生器每秒鐘插入1000條記錄約0.003秒鐘,同時(shí)自動(dòng)清理數(shù)據(jù)類每秒鐘刪除1000條記錄約0.13秒,不同線程互不干擾。

三、體驗(yàn)地址

體驗(yàn)地址:/s/15ZKAlptW-rDcNq8zlzdYLg提取碼:uyes文件名:bin_dbtool.zip

國內(nèi)站點(diǎn):/feiyangqingyun

國際站點(diǎn):/feiyangqingyun

四、效果圖

五、相關(guān)代碼

#include"frmdbdelegate.h"

#include"ui_frmdbdelegate.h"

#include"quihelper.h"

#include"dbdelegate.h"

#include"dbconnthread.h"

frmDbDelegate::frmDbDelegate(QWidget*parent):QWidget(parent),ui(newUi::frmDbDelegate)

ui-setupUi(this);

this-initForm();

frmDbDelegate::~frmDbDelegate()

deleteui;

voidfrmDbDelegate::showEvent(QShowEvent*)

staticboolisShow=false;

if(!isShow){

isShow=true;

QTimer::singleShot(100,this,SLOT(initDb()));

QTimer::singleShot(500,this,SLOT(initData()));

voidfrmDbDelegate::initForm()

QUIHelper::initTableView(ui-tableView,25,false,true);

//實(shí)例化數(shù)據(jù)庫通信類

dbConn=newDbConnThread(this);

dbConn-setDbFlag("委托");

connect(dbConn,SIGNAL(debug(QString)),this,SLOT(debug(QString)));

connect(dbConn,SIGNAL(error(QString)),this,SLOT(error(QString)));

voidfrmDbDelegate::initDb()

DbInfodbInfo;

//強(qiáng)制本程序帶的數(shù)據(jù)庫dbtool.db

dbInfo.dbName=DbHelper::getDbDefaultFile();

dbConn-setConnInfo(DbHelper::getDbType("sqlite"),dbInfo);

if(!dbConn-openDb()){

QUIHelper::showMessageBoxError("委托數(shù)據(jù)庫打開失敗!");

voidfrmDbDelegate::initData()

if(!dbConn-getOk()){

return;

model=newQSqlTableModel(this);

model-setTable("UserInfo");

model-setSort(0,Qt::AscendingOrder);

model-setEditStrategy(QSqlTableModel::OnManualSubmit);

model-select();

ui-tableView-setModel(model);

ui-tableView-setProperty("model",true);

QListQStringcolumnNames;

columnNames"用戶名稱""用戶密碼""用戶類型""模塊A""模塊B""模塊C""模塊D""模塊E""模塊F""模塊G""備注";

QListintcolumnWidths;

columnWidths100120806060606060606060;

intcount=columnNames.count();

for(inti=0;icount;i++){

model-setHeaderData(i,Qt::Horizontal,columnNames.at(i));

ui-tableView-setColumnWidth(i,columnWidths.at(i));

//用戶密碼委托

DbDelegate*d_txt_userPwd=newDbDelegate(this);

d_txt_userPwd-setDelegateType("QLineEdit");

d_txt_userPwd-setDelegatePwd(true);

d_txt_userPwd-setDelegateColumn(1);

ui-tableView-setItemDelegateForColumn(1,d_txt_userPwd);

//用戶類型委托

QStringListuserType;

userType"操作員""管理員";

DbDelegate*d_cbox_userType=newDbDelegate(this);

d_cbox_userType-setDelegateType("QComboBox");

d_cbox_userType-setDelegateValue(userType);

ui-tableView-setItemDelegateForColumn(2,d_cbox_userType);

//啟用禁用委托

for(inti=3;i(3+7);i++){

DbDelegate*d_ckbox_userAdmin=newDbDelegate(this);

d_ckbox_userAdmin-setDelegateColumn(i);

d_ckbox_userAdmin-setDelegateType("QCheckBox");

d_ckbox_userAdmin-setCheckBoxText("啟用","禁用");

ui-tableView-setItemDelegateForColumn(i,d_ckbox_userAdmin);

voidfrmDbDelegate::debug(constQStringmsg)

voidfrmDbDelegate::error(constQStringmsg)

voidfrmDbDelegate::on_btnAdd_clicked()

intcount=model-rowCount();

model-insertRow(count);

QStringuserName=model-index(count-1,0).data().toString();

QStringuserPwd=model-index(count-1,1).data().toString();

QStringuserType=model-index(count-1,2).data().toString();

QStringuserAdmin1=model-index(count-1,3).data().toString();

QStringuserAdmin2=model-index(count-1,4).data().toString();

QStringuserAdmin3=model-index(count-1,5).data().toString();

QStringuserAdmin4=model-index(count-1,6).data().toString();

QStringuserAdmin5=model-index(count-1,7).data().toString();

QStringuserAdmin6=model-index(count-1,8).data().toString();

QStringuserAdmin7=model-index(count-1,9).data().toString();

QStringuserMark=model-index(count-1,10).data().toString();

//設(shè)置新增加的行默認(rèn)值

model-setData(model-index(count,0),userName);

model-setData(model-index(count,1),userPwd);

model-setData(model-index(count,2),userType);

model-setData(model-index(count,3),userAdmin1);

model-setData(model-index(count,4),userAdmin2);

model-setData(model-index(count,5),userAdmin3);

model-setData(model-index(count,6),userAdmin4);

model-setData(model-index(count,7),userAdmin5);

model-setData(model-index(count,8),userAdmin6);

model-setData(model-index(count,9),userAdmin7);

model-setData(model-index(count,10),userMark);

ui-tableView-setCurrentIndex(model-index(count,0));

voidfrmDbDelegate::on_btnSave_clicked()

model-database().transaction();

if(model-submitAll()){

model-database().commit();

}else{

model-database().rollback();

qDebug()TIMEMSmodel-database().lastError();

QUIHelper::showMessageBoxError("保存信息失敗,請(qǐng)重新填寫!");

//有些數(shù)據(jù)庫需要主動(dòng)查詢一下不然是空白的比如odbc數(shù)據(jù)源

model-select();

voidfrmDbDelegate::on_btnDelete_clicked()

introw=ui-tableView-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論