版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年湖南勞動(dòng)人事職業(yè)學(xué)院單招職業(yè)傾向性測(cè)試題庫及答案1套
- 2026年哈爾濱應(yīng)用職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測(cè)試模擬測(cè)試卷及答案1套
- 2025廣東省疾病預(yù)防控制中心招聘科研助理1人(公共基礎(chǔ)知識(shí))測(cè)試題附答案
- 2026寧波市江北區(qū)面向2026屆高校畢業(yè)生招聘高層次和緊缺人才13人筆試參考題庫及答案解析
- 2025年甘肅省定西市隴西縣福星中心衛(wèi)生院高塄分院招聘鄉(xiāng)村醫(yī)生(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2026中國安能集團(tuán)科工有限公司招聘6人筆試參考題庫及答案解析
- 2025河南省人力資源開發(fā)中心有限公司招聘1人考試題庫附答案
- 2025年甘肅省隴南師范學(xué)院第二批高層次人才和急需緊缺專業(yè)技術(shù)人才引進(jìn)(20人)參考題庫附答案
- 2025廣東廣州市天河區(qū)靈秀小學(xué)招聘英語教師1人(學(xué)校自籌經(jīng)費(fèi))考試歷年真題匯編附答案
- 2025年保山市部分醫(yī)療衛(wèi)生事業(yè)單位招聘博士研究生(10人)筆試備考題庫附答案
- DB3502-Z 5026-2017代建工作規(guī)程
- 廣東省大灣區(qū)2023-2024學(xué)年高一上學(xué)期期末生物試題【含答案解析】
- 第四單元地理信息技術(shù)的應(yīng)用課件 【高效課堂+精研精講】高中地理魯教版(2019)必修第一冊(cè)
- 魯科版高中化學(xué)必修一教案全冊(cè)
- 提高隧道初支平整度合格率
- 2023年版測(cè)量結(jié)果的計(jì)量溯源性要求
- 建筑能耗與碳排放研究報(bào)告
- GB 29415-2013耐火電纜槽盒
- 中國古代經(jīng)濟(jì)試題
- 軟件定義汽車:產(chǎn)業(yè)生態(tài)創(chuàng)新白皮書
- 磷石膏抹灰專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論