最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)繪制多個(gè)設(shè)備的流量曲線圖詳解

 更新時(shí)間:2023年01月05日 09:06:03   作者:音視頻開發(fā)老舅  
這篇文章主要為大家詳細(xì)介紹了如何使用Qt開發(fā)繪制多個(gè)設(shè)備的流量曲線圖,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下

一、說明

在實(shí)際項(xiàng)目中,主要是使用Qt開發(fā)CS程序,當(dāng)然主要是客戶端。公司項(xiàng)目中有這個(gè)需求是實(shí)時(shí)顯示多個(gè)設(shè)備的流量曲線圖,設(shè)備將流量信息發(fā)給服務(wù)端,服務(wù)端再將信息通過Socket發(fā)給Qt客戶端,Qt客戶端通過Socket接收后實(shí)時(shí)顯示在程序的一個(gè)窗口上;這個(gè)顯示是以曲線圖的展示方式。

二、界面模型

接到這個(gè)功能需求后,使用的界面模型如下圖所示,圖示已經(jīng)標(biāo)示的很清楚了,我就不多詳細(xì)描述了:

三、功能分析

1、由于設(shè)備較多,超過100臺(tái),所以不可能每個(gè)設(shè)備的流量曲線都用一種顏色,因此只選擇幾種比較明顯的顏色作為設(shè)備的流量曲線顏色,每次上來一個(gè)設(shè)備,就用其中的一種顏色繪制曲線。

2、使用QSS來設(shè)置部件的樣式信息,如前景、背景、被選擇時(shí)、鼠標(biāo)移動(dòng)時(shí)等等。

3、用一個(gè)部件用作專門的繪制部件,該部件放在窗口中,因此安裝事件過濾器,用于重繪子部件信息,繪制曲線圖。

4、處理設(shè)備上線/下線的網(wǎng)絡(luò)消息以及設(shè)備主動(dòng)發(fā)送的動(dòng)態(tài)流量信息;處理Qt客戶端與服務(wù)端的連接/斷開事件。

四、界面效果

開發(fā)出來的最終效果圖如下所示:

初始所有設(shè)備的流量圖如下圖

選擇設(shè)備名為a5的流量圖,其中a5設(shè)備的流量曲線加粗,背景半透明等效果如下圖

選擇設(shè)備名為a7的流量圖,其中a7設(shè)備的流量曲線加粗,背景半透明等效果如下圖

五、主要代碼

//消息過濾,主要用于重繪子控件,過濾Paint事件
 bool QAPRTCurWidget::eventFilter(QObject *watched, QEvent *event)
 {
     if(watched==ui->widget_rxtx && event->type()==QEvent::Paint)
     {
         updateWidgetRTX();
     }
     return QFrame::eventFilter(watched,event);
 }
//繪圖操作
 void QAPRTCurWidget::updateWidgetRTX()
 {
     QPainter painter(ui->widget_rxtx);
     painter.setFont(QFont("Times", , QFont::Bold));
     //繪制背景顏色
     painterBackground(painter);
     //畫最左邊一條虛線,用于和List隔開
     painterLeftDashLine(painter);
     //畫縱坐標(biāo)文本標(biāo)識(shí)
     updateVTextID(painter);
     //畫縱坐標(biāo)文本刻度以及橫縱坐標(biāo)軸
     updateVTextMarkAndCoord(painter);
     //畫RX曲線
     paintRXLineInfo(painter);
     //畫TX曲線
     paintTXLineInfo(painter);
 }
//畫縱坐標(biāo)文本刻度以及橫縱坐標(biāo)軸
 void QAPRTCurWidget::updateVTextMarkAndCoord(QPainter &painter)
 {
     painter.save();
     //繪圖區(qū)間的實(shí)際高度(部件高度-頂部間隔-底部間隔)
     int nActPaintHeight = ui->widget_rxtx->height()-INTERVAL_WIDGET_TOP-INTERVAL_WIDGET_BOTTOM;
     //每隔的間隔高度
     float fIntervalHeight = ((float)nActPaintHeight)/(m_nVSingleLinePointCount-);
     float fYPointForZero = ui->widget_rxtx->height()-INTERVAL_WIDGET_BOTTOM;
     double dDivideValue = ;
     if(ui->toolButton_rxflow->isChecked())
     {
         dDivideValue = ((double)nRXMaxValue)/(m_nVSingleLinePointCount-);
     }
     if(ui->toolButton_txflow->isChecked())
     {
         dDivideValue = ((double)nTXMaxValue)/(m_nVSingleLinePointCount-);
     }
     for(int nIndex=;nIndex<m_nVSingleLinePointCount;++nIndex)
     {
         //設(shè)置文本顏色
         painter.setPen(TEXTCOLOR_WIDGET_PAINT);
         //將原來的字體變小,設(shè)置為8
         QFont objFont = painter.font();
         objFont.setPointSize();
         painter.setFont(objFont);
         //畫文本,加3的目的是為了是其和橫線能保持中間持平
         painter.drawText(INTERVAL_VMARK_LEFT,fYPointForZero-nIndex*fIntervalHeight+,QCommonOP::getKMStrForBit(dDivideValue*nIndex));
         //設(shè)置橫線顏色
         painter.setPen(COORDCOLOR_WIDGET_PAINT);
         //畫橫線(第一條和最后一條為實(shí)線,中間的為虛線)
         QPen objPen = painter.pen();
         if(==nIndex || (m_nVSingleLinePointCount-)==nIndex)
         {
            objPen.setStyle(Qt::SolidLine);
         }
         else
         {
             objPen.setStyle(Qt::DashLine);
         }
         painter.setPen(objPen);
         float x1 = ui->widget_rxtx->width()-INTERVAL_WIDGET_RIGHT;
         float y1 = fYPointForZero-nIndex*fIntervalHeight;
         painter.drawLine(INTERVAL_HCOORD_LEFT,fYPointForZero-nIndex*fIntervalHeight,x1,y1);
     }
     int nActPaintWidth = ui->widget_rxtx->width()-INTERVAL_HCOORD_LEFT-INTERVAL_WIDGET_RIGHT;
     //每隔的間隔高度--橫向:注意使用(float)nActPaintWidth)作為分子,即浮點(diǎn)數(shù)
     float fIntervalWidth = ((float)nActPaintWidth)/(m_nHSingleLinePointCount-);
     for(int nIndex=;nIndex<m_nHSingleLinePointCount;++nIndex)
     {
         QPen objPen = painter.pen();
         if(==nIndex || (m_nHSingleLinePointCount-)==nIndex)
         {
            objPen.setStyle(Qt::SolidLine);
         }
         else
         {
             objPen.setStyle(Qt::DashLine);
         }
         painter.setPen(objPen);
         int nXPoint = INTERVAL_HCOORD_LEFT+nIndex*fIntervalWidth;
         painter.drawLine(nXPoint,INTERVAL_WIDGET_TOP,nXPoint,ui->widget_rxtx->height()-INTERVAL_WIDGET_BOTTOM);
     }
     painter.restore();
 }

到此這篇關(guān)于Qt實(shí)現(xiàn)繪制多個(gè)設(shè)備的流量曲線圖詳解的文章就介紹到這了,更多相關(guān)Qt繪制流量曲線圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題

    C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C語言實(shí)現(xiàn)簡單電子通訊錄(2)

    C語言實(shí)現(xiàn)簡單電子通訊錄(2)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單電子通訊錄的第二部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C++開發(fā)在IOS環(huán)境下運(yùn)行的LRUCache緩存功能

    C++開發(fā)在IOS環(huán)境下運(yùn)行的LRUCache緩存功能

    本文著重介紹如何在XCODE中,通過C++開發(fā)在IOS環(huán)境下運(yùn)行的緩存功能。算法基于LRU,最近最少使用,需要的朋友可以參考下
    2012-11-11
  • C++學(xué)習(xí)筆記之pimpl用法詳解

    C++學(xué)習(xí)筆記之pimpl用法詳解

    在編寫穩(wěn)定代碼是,管理好代碼間的依賴性是不可缺少的一個(gè)環(huán)節(jié)。特別是庫文件的編寫中,減少代碼間的依賴性可以提供一個(gè)“干凈”的接口。下面這篇文章主要給大家介紹了關(guān)于C++中pimpl用法的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • C++中map 字典的基本使用教程

    C++中map 字典的基本使用教程

    Map是字典一樣的數(shù)據(jù)結(jié)構(gòu),它是(鍵,值)對(duì)的關(guān)聯(lián)數(shù)組,其中每個(gè)唯一鍵僅與單個(gè)值相關(guān)聯(lián),下面這篇文章主要給大家介紹了關(guān)于C++中map 字典的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • c++截取漢字和英文混合字符串代碼實(shí)例

    c++截取漢字和英文混合字符串代碼實(shí)例

    這篇文章主要介紹了c++截取漢字英文混合字符串,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++無法打開源文件bits/stdc++.h的問題

    C++無法打開源文件bits/stdc++.h的問題

    這篇文章主要介紹了C++無法打開源文件bits/stdc++.h的問題以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表

    c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表

    這篇文章主要介紹了c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表,大家參考使用吧
    2013-11-11
  • C++類型轉(zhuǎn)換和IO流操作處理教程

    C++類型轉(zhuǎn)換和IO流操作處理教程

    這篇文章主要給大家介紹了關(guān)于C++類型轉(zhuǎn)換和IO流操作處理的相關(guān)資料,標(biāo)準(zhǔn)C++為了加強(qiáng)類型轉(zhuǎn)換的可視性,引入了四種命名的強(qiáng)制類型轉(zhuǎn)換操作符,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • C語言進(jìn)階之字符串查找?guī)旌瘮?shù)詳解

    C語言進(jìn)階之字符串查找?guī)旌瘮?shù)詳解

    字符串是一種非常重要的數(shù)據(jù)類型,但是C語言不存在顯式的字符串類型,C語言中的字符串都以字符串常量的形式出現(xiàn)或存儲(chǔ)在字符數(shù)組中,下面這篇文章主要給大家介紹了關(guān)于C語言進(jìn)階之字符串查找?guī)旌瘮?shù)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

双城市| 汽车| 耒阳市| 丰宁| 海晏县| 章丘市| 克拉玛依市| 武隆县| 同江市| 天等县| 汾西县| 许昌市| 秀山| 静安区| 鹤山市| 阿克陶县| 江油市| 汾西县| 大港区| 普陀区| 北宁市| 资中县| 广德县| 酒泉市| 新乐市| 福清市| 乐亭县| 巴南区| 西安市| 陕西省| 东阳市| 宜黄县| 常山县| 铜川市| 南部县| 仪陇县| 富锦市| 北海市| 田林县| 漳浦县| 松溪县|