摘自互動(dòng)百科:在圖像影像軟件中表示選區(qū)的動(dòng)態(tài)虛線,因?yàn)樘摼€閃爍的樣子像是一群螞蟻在跑,所以俗稱螞蟻線。在Poshop,After Effect等軟件中比較常見(jiàn)。
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括周村網(wǎng)站建設(shè)、周村網(wǎng)站制作、周村網(wǎng)頁(yè)制作以及周村網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,周村網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到周村省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
背景:用過(guò)excel的同學(xué)都知道,當(dāng)對(duì)單元格進(jìn)行復(fù)制時(shí),單元格周圍就會(huì)出現(xiàn)一個(gè)跑動(dòng)的矩形框,這個(gè)矩形框就被稱為螞蟻線。通過(guò)設(shè)置螞蟻線的線型和調(diào)整控件有效刷新次數(shù)我們可以得到不同的跑動(dòng)效果,這是一個(gè)非常有意思的現(xiàn)象。
本文將給大家詳細(xì)介紹關(guān)于Qt表格控件螞蟻線的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
如下圖就是螞蟻線的效果截圖,單擊單元格時(shí),會(huì)繪制一個(gè)2個(gè)像素寬的外框;當(dāng)雙擊某個(gè)單元格時(shí),就會(huì)產(chǎn)生螞蟻線,螞蟻線的線型和跑動(dòng)速度都可以定制。文末會(huì)放出演示代碼下載鏈接。
說(shuō)到Qt繪圖,肯定離不開paintEvent函數(shù),而且大多數(shù)的功能都可以通過(guò)重寫paintEvent函數(shù)來(lái)完成。凡是總有例外,當(dāng)控件本身就比較復(fù)雜,或者只需要重寫控件某一部分時(shí),就需要重寫一些其他東西來(lái)完成需求,比如表格螞蟻線繪制就屬于這個(gè)例外,當(dāng)我們重寫表格時(shí)就不能重寫paintEvent函數(shù),如果重寫這個(gè)函數(shù)那么表格的所有東西就需要我們自己去繪制,一個(gè)好的辦法就是重寫QStyledItemDelegate代理類,通過(guò)這個(gè)類我們可以定制表格控件的每一個(gè)項(xiàng)。下面我們就來(lái)仔細(xì)的分析下基于重寫代理類的實(shí)現(xiàn)細(xì)節(jié),理解下面4個(gè)實(shí)現(xiàn)維度后螞蟻線基本就完成了。
螞蟻線是針對(duì)表格項(xiàng)來(lái)進(jìn)行繪制的,因此首先想到的就是刷新表格某一項(xiàng)來(lái)進(jìn)行提高繪制效率,通過(guò)閱讀Qt源碼,找到QTableView::paintEvent函數(shù)中對(duì)表格項(xiàng)進(jìn)行了繪制,主要是通過(guò)調(diào)用QTableViewPrivate::drawCell函數(shù)來(lái)進(jìn)行每個(gè)單元格的繪制,該函數(shù)最后一行是通過(guò)QStyledItemDelegate類的paint方法來(lái)進(jìn)行繪制,與第三節(jié)第一段的說(shuō)明對(duì)應(yīng)起來(lái)。因此如果想進(jìn)行局部刷新看來(lái)困難比較大,因此最終決定每次刷新螞蟻線時(shí)對(duì)整個(gè)表格進(jìn)行刷新。
定時(shí)刷新,顧名思義就是我們需要一個(gè)定時(shí)器,定時(shí)刷新表格控件。首先想到的是我們自己維護(hù)一個(gè)QTimer,通過(guò)QTimer::timeout信號(hào)來(lái)刷新表格;除此之外QObject類已經(jīng)幫我們提供了一個(gè)timerEvent回調(diào)函數(shù),我們只需要通過(guò)startTime接口來(lái)啟動(dòng)一個(gè)定時(shí)器,timerEvent函數(shù)就會(huì)被定時(shí)調(diào)用,當(dāng)然了這個(gè)回調(diào)接口同時(shí)支持多個(gè)定時(shí)器,用timeID進(jìn)行區(qū)分每個(gè)定時(shí)器。
當(dāng)選擇一個(gè)單元格時(shí)(當(dāng)前單元格發(fā)現(xiàn)變化),繪制矩形框;繪制矩形框比較簡(jiǎn)單,這塊需要注意一個(gè)地方,就是當(dāng)繪制第一列的時(shí)候矩形框可能會(huì)跑出當(dāng)前項(xiàng),導(dǎo)致矩形框顯示不全。螞蟻線繪制時(shí)也存在這個(gè)問(wèn)題。
void GMPFileItemDelegate::DrawBorderRect( QPainter * painter, const QRect & rect, bool firstColumn ) const { painter->save(); QPen pen = painter->pen(); pen.setWidth(2); pen.setColor(QColor(0, 132, 255)); painter->setPen(pen); QRect tmpRect = rect; if (firstColumn) { tmpRect.adjust(2, 1, -1, -1); } else { tmpRect.adjust(1, 1, -1, -1); } painter->drawRect(tmpRect); painter->restore(); }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.rwnh.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前題目:Qt學(xué)習(xí)教程之表格控件螞蟻線詳解-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.rwnh.cn/article12/dciodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站策劃、品牌網(wǎng)站制作、Google、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容