欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)數(shù)據(jù)查詢導出打印

 更新時間:2022年07月13日 09:17:46   作者:feiyangqingyun  
這篇文章主要為大家介紹了如何利用Qt編寫物聯(lián)網(wǎng)管理平臺中數(shù)據(jù)查詢導出打印的功能,文字的示例代碼講解詳細,感興趣的可以了解一下

一、前言

本系統(tǒng)存儲的三大類記錄,運行日志、報警日志、用戶日志,這些不同類似的記錄,都需要提供查詢功能,可以按照記錄的時間范圍等條件查詢,查詢的記錄需要做分頁顯示,為了分頁顯示還特意花了很多時間專門封裝了一個通用分頁控件,分兩部分,一部分專門的分頁UI展示,顯示頁碼,可以單擊頁碼直接跳轉(zhuǎn)到對應頁,也可以直接數(shù)碼頁碼跳轉(zhuǎn),還可以上一頁、下一頁、第一頁、末一頁按鈕跳轉(zhuǎn)。一部分是分頁功能,專門按照不同的數(shù)據(jù)庫組合sql分頁語句查詢。關于分頁語句,sqlite和mysql用的是limit,sqlserver用的是top,postgresql用的是limit+offset,oracle比較復雜需要用rownum字段組合。

查詢出來的數(shù)據(jù)除了展示外,還需要導出到xls或者pdf文件,以及打印,可以復用之前的查詢所用的sql語句,查詢出來的數(shù)據(jù)集合發(fā)給導出和打印類,直接按照一行行的表格形式,導出到xls文件可以用通用的xml形式的數(shù)據(jù),這樣可以做到不依賴任何office組件。而導出到pdf其實就是和打印一起的,俗稱打印到pdf文件,里面的內(nèi)容也是一樣的,都是采用html格式的數(shù)據(jù),比如html中的table,也基本上是table格式就行。

二、功能特點

2.1 軟件模塊

  • 設備監(jiān)控模塊,包括數(shù)據(jù)監(jiān)控(表格形式展示)、設備面板(面板形式展示)、地圖監(jiān)控(地圖形式展示)、曲線監(jiān)控(曲線形式展示)。
  • 數(shù)據(jù)查詢模塊,包括報警記錄、運行記錄、操作記錄。
  • 系統(tǒng)設置模塊,包括基本設置、端口管理、控制器管理、探測器管理、報警聯(lián)動、類型設置等。
  • 其他設置模塊,包括用戶管理、地圖管理、位置調(diào)整、組態(tài)設計、設備調(diào)試等。

2.2 基礎功能

  1. 設備數(shù)據(jù)采集,支持串口、網(wǎng)絡,串口可設置串口號、波特率,網(wǎng)絡可設置IP地址、通訊端口。
  2. 每個端口支持采集周期時間,默認1秒鐘一個設備。
  3. 支持設置通訊超時次數(shù),默認3次。
  4. 支持最大重連時間,用于重新讀取離線的設備。
  5. 控制器信息,能夠添加控制器名稱,選擇控制器地址、控制器型號,設置該控制器下面的探測器數(shù)量。
  6. 探測器信息,能夠添加位號、探測器型號、氣體種類、氣體符號、高報值、低報值、緩沖值、清零值、是否啟用、報警聲音、背景地圖、存儲周期、數(shù)值換算小數(shù)點位數(shù)、報警延時時間、報警的類型(HH,LL,HL)等。
  7. 類型管理可配置控制器型號、探測器型號、氣體種類、氣體符號等。
  8. 地圖支持導入和刪除,所有的探測器在地圖上的位置可自由拖動保存。
  9. 端口信息、控制器信息、探測器信息、類型信息、用戶信息等,都支持導入、導出、導出到excel、打印。
  10. 運行記錄、報警記錄、操作記錄,都支持多條件組合查詢,比如時間段、控制器、探測器等,所有記錄支持導出到excel/pdf和打印。
  11. 運行記錄、報警記錄、操作記錄都可刪除指定時間范圍內(nèi)的數(shù)據(jù)。
  12. 系統(tǒng)設置可選擇對應表最大保存記錄數(shù),自動清理早期數(shù)據(jù),留出足夠的空間存儲重要的數(shù)據(jù)。
  13. 報警短信轉(zhuǎn)發(fā),支持多個接收手機號碼,可設定發(fā)送間隔,比如即時發(fā)送或者6個小時發(fā)送一次所有的報警信息,短信內(nèi)容過長,自動拆分多條短信。
  14. 報警郵件轉(zhuǎn)發(fā),支持多個接收郵箱,可設定發(fā)送間隔,比如即時發(fā)送或者6個小時發(fā)送一次所有的報警信息,支持附件發(fā)送。
  15. 設置軟件的中文標題、英文標題、logo路徑、版權所有等。
  16. 開關設置開機運行、報警聲音、自動登錄、記住密碼等。
  17. 報警聲音可設置播放次數(shù),界面風格樣式提供18套皮膚文件選擇。
  18. 用戶管理,包括用戶權限配置,不同用戶可以有不同模塊的權限。
  19. 用戶登錄和用戶退出,可以記住密碼和自動登錄,超過三次報錯提示并關閉程序。
  20. 四種監(jiān)控模式,設備面板監(jiān)控、地圖監(jiān)控、表格數(shù)據(jù)監(jiān)控、曲線數(shù)據(jù)監(jiān)控,可自由切換,四種模式下都實時展示采集到的數(shù)據(jù),報警閃爍等。
  21. 報警繼電器聯(lián)動,一個位號可以跨串口聯(lián)動多個模塊和繼電器號,支持多對多。

2.3 特色功能

  1. 通信協(xié)議支持modbus_com、modbus_tcp_rtu,后期拓展mqtt等協(xié)議。
  2. 數(shù)據(jù)源除了真實的硬件設備采集,還可選數(shù)據(jù)庫采集,這樣用戶可以安排其他程序員比如java程序員將前端采集好的數(shù)據(jù)放到數(shù)據(jù)庫,本系統(tǒng)直接從數(shù)據(jù)庫采集即可。數(shù)據(jù)庫采集模式可以作為通用的系統(tǒng)使用,更適合多人多系統(tǒng)協(xié)作。
  3. 智能跳過超時的設備,加快對在線設備的采集速度,當設備數(shù)量很多的時候尤其有用。
  4. 對智能跳過的超時的設備,在設定的重連時間自動采集一次,以便探測設備是否又重新上線。
  5. 每個探測器可控是否啟用,不啟用則不會采集,也不會在界面顯示,相當于運行階段臨時關閉。
  6. 探測器可設置緩沖值和報警延時時間,在該值附近波動產(chǎn)生的報警,不計入報警,只有持續(xù)處于報警值且超過報警延時時間才算真正報警,這樣可以規(guī)避很多波動導致的誤報。
  7. 探測器可設置存儲周期,按照設定的時間來存儲一條運行記錄,可以按照重要程度對重要性高的設定存儲周期短一些,不重要的設定大一些,這樣可以節(jié)省不少的存儲空間,也保證了重要的數(shù)據(jù)及時存儲。
  8. 探測器可設置清零值,在一些高精度高靈敏的設備可能出廠的時候默認值未必是0,需要設定清零值來表示初始值。
  9. 探測器可設置小數(shù)點,用于計算后的真實數(shù)據(jù)控制小數(shù)點點位顯示,相當于除以10、除以100、除以1000,這樣大部分的探測器數(shù)據(jù)直接通過小數(shù)點位設置控制真實換算后的值,極個別的需要特殊轉(zhuǎn)換的可以在通信協(xié)議中約定。
  10. 探測器報警的類型支持多種,有些設備是高于某個值高報,低于某個值低報,而有些設備是在最小值最大值范圍內(nèi)是高報,低于最小值低報,高于最大值正常。這樣可以分情況處理,涵蓋各種報警類型。
  11. 原創(chuàng)數(shù)據(jù)導入、導出、打印機制,跨平臺不依賴任何組件,瞬間導出數(shù)據(jù)。
  12. 導出到excel的記錄支持所有excel、wps等表格文件版本,不依賴excel等軟件。
  13. 高報顏色、低報顏色、正常顏色、默認值顏色等,都可以自由設置。
  14. 支持云端數(shù)據(jù)同步,將本地采集到的數(shù)據(jù)實時同步到云端。
  15. 支持網(wǎng)絡轉(zhuǎn)發(fā)和網(wǎng)絡接收,網(wǎng)絡接收開啟后,軟件從udp接收數(shù)據(jù)進行解析。網(wǎng)絡轉(zhuǎn)發(fā)支持多個目標IP,這樣就實現(xiàn)了本地采集的軟件,自由將數(shù)據(jù)轉(zhuǎn)到客戶端,隨時查看采集到的數(shù)據(jù)。
  16. 自動記住用戶最后停留的界面以及其他配置信息,重啟后自動應用。
  17. 報警自動切換到對應的地圖,探測器按鈕閃爍,表格數(shù)據(jù)對應顏色顯示。
  18. 雙擊探測器圖標,彈出對應探測器詳細信息,可以根據(jù)需要定制回控操作。
  19. 數(shù)據(jù)庫支持多種,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金倉等。
  20. 本地設備采集到的數(shù)據(jù)實時上傳到云端,以便手機APP或者web等其他方式提取。
  21. 自帶設備模擬工具,支持不同型號的多個設備數(shù)據(jù)模擬,同時還帶數(shù)據(jù)庫數(shù)據(jù)模擬,以便在沒有設備的時候測試數(shù)據(jù)。
  22. 標準modbus協(xié)議,各種控制器類型、探測器類型、種類、符號等全部自定義,非常靈活和強大,通信協(xié)議示例數(shù)據(jù)非常完整,通用各種modbus協(xié)議系統(tǒng),適用于各種應用場景接入。
  23. 同時集成了串口通信、網(wǎng)絡通信、數(shù)據(jù)庫通信、數(shù)據(jù)導入導出打印、通信協(xié)議解析、界面UI、全局換膚等眾多組件和知識點,非常適合新手入門和進階。
  24. 支持xp、win7、win10、、win11、linux、mac、各種國產(chǎn)系統(tǒng)(UOS、中標麒麟、銀河麒麟等)、嵌入式linux等系統(tǒng)。
  25. 注釋完整,項目結構清晰,超級詳細完整的使用開發(fā)手冊,精確到每個代碼文件的功能說明,不斷持續(xù)迭代版本。

三、體驗地址

國內(nèi)站點:https://gitee.com/feiyangqingyun

國際站點:https://github.com/feiyangqingyun

體驗地址:https://pan.baidu.com/s/1foas7ytSXh7gHOTDqDREjQ 提取碼:axip 文件名:bin_iotsystem.zip。

四、效果圖

五、相關代碼

void DataHelper::dataout(const QString &fileName, const QString &sheetName, const QString &title,
                         const QList<QString> &columnNames, const QList<int> &columnWidths,
                         const QStringList &content, bool landscape)
{
    DataContent dataContent;
    dataContent.fileName = fileName;
    dataContent.sheetName = sheetName;
    dataContent.title = title;
    dataContent.columnNames = columnNames;
    dataContent.columnWidths = columnWidths;
    dataContent.content = content;
    dataContent.landscape = landscape;
    dataout(dataContent);
}

QString DataHelper::dataout(QTableView *table, QStandardItemModel *model, quint8 type, const QString &file, const QString &title, const QString &sheet)
{
    //從數(shù)據(jù)模型拿到行列
    int row = model->rowCount();
    int column = model->columnCount();
    if (row == 0 || column == 0) {
        return QString();
    }

    //獲取數(shù)據(jù)集合
    QStringList content;
    for (int i = 0; i < row; ++i) {
        QStringList list;
        for (int j = 0; j < column; ++j) {
            list << model->item(i, j)->text();
        }
        //每行數(shù)據(jù)作為一個整體字符串帶分割符 ; 存入
        content << list.join(";");
    }

    //獲取列名和列寬
    QList<QString> columnNames;
    QList<int> columnWidths;
    for (int i = 0; i < column; ++i) {
        columnNames << model->headerData(i, Qt::Horizontal).toString();
        columnWidths << table->columnWidth(i);
    }

    return dataout(type, file, title, sheet, content, columnNames, columnWidths);
}

QString DataHelper::dataout(QTableWidget *table, quint8 type, const QString &file, const QString &title, const QString &sheet)
{
    //從數(shù)據(jù)模型拿到行列
    int row = table->rowCount();
    int column = table->columnCount();
    if (row == 0 || column == 0) {
        return QString();
    }

    //獲取數(shù)據(jù)集合
    QStringList content;
    for (int i = 0; i < row; ++i) {
        QStringList list;
        for (int j = 0; j < column; ++j) {
            list << table->item(i, j)->text();
        }
        //每行數(shù)據(jù)作為一個整體字符串帶分割符 ; 存入
        content << list.join(";");
    }

    //獲取列名和列寬
    QList<QString> columnNames;
    QList<int> columnWidths;
    for (int i = 0; i < column; ++i) {
        columnNames << table->horizontalHeaderItem(i)->text();
        columnWidths << table->columnWidth(i);
    }

    return dataout(type, file, title, sheet, content, columnNames, columnWidths);
}

QString DataHelper::dataout(quint8 type, const QString &file, const QString &title,
                            const QString &sheet, const QStringList &content,
                            const QStringList &columnNames, const QList<int> &columnWidths)
{
    //設置結構體數(shù)據(jù)
    DataContent dataContent;
    //填充內(nèi)容
    dataContent.content = content;
    //設置列名列寬
    dataContent.columnNames = columnNames;
    dataContent.columnWidths = columnWidths;
    //設置標題
    dataContent.title = title;
    //設置默認對齊
    dataContent.defaultAlignment = 0;

    //如果是導出數(shù)據(jù)則先判斷文件名稱是否為空,為空則彈出文件對話框選擇
    QString fileName = file;
    if (fileName.isEmpty() && type < 3) {
        //不同的格式后綴
        QString filter = "all files (*.*)";
        if (type == 0) {
            filter = "csv files (*.csv)";
        } else if (type == 1) {
            filter = "xls files (*.xls)";
        } else if (type == 2) {
            filter = "pdf files (*.pdf)";
        }

        fileName = QFileDialog::getSaveFileName(0, "選擇保存文件", "", filter);
        if (fileName.isEmpty()) {
            return fileName;
        }
    }

    //設置文件名
    dataContent.fileName = fileName;
    //xls還需要設置表名
    dataContent.sheetName = sheet;

    //調(diào)用靜態(tài)函數(shù)
    if (type == 0) {
        //重新組織內(nèi)容,前面寫入標題,分隔符換成csv的定義的分隔符
        QStringList list;
        //把標題加到內(nèi)容中
        list << columnNames.join(DataCsv::CsvSpliter);
        //重新更換分隔符
        foreach (QString text, content) {
            text.replace(";", DataCsv::CsvSpliter);
            list << text;
        }
        DataCsv::outputData(fileName, list);
    } else if (type == 1) {
        DataXls::saveXls(dataContent);
    } else if (type == 2) {
        DataPrint::savePdf(dataContent);
    } else if (type == 3) {
        DataPrint::print(dataContent);
    }

    return fileName;
}

到此這篇關于Qt物聯(lián)網(wǎng)管理平臺之實現(xiàn)數(shù)據(jù)查詢導出打印的文章就介紹到這了,更多相關Qt數(shù)據(jù)查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言實現(xiàn)簡單學生管理系統(tǒng)

    C語言實現(xiàn)簡單學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單學生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)詳解

    C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)詳解

    下面小編就為大家?guī)硪黄狢++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)的文章。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • C++ 關于MFC List Control 控件的總結

    C++ 關于MFC List Control 控件的總結

    這篇文章主要介紹了C++ 關于MFC List Control 控件的總結的相關資料,十分的詳細,有需要的朋友可以參考下
    2015-06-06
  • 用VC++6.0的控制臺實現(xiàn)2048小游戲的程序

    用VC++6.0的控制臺實現(xiàn)2048小游戲的程序

    本文是作者拜讀劉地同學的《C語言控制臺版2048》之后感覺非常不錯,添加了注釋之后分享給大家的,方便更多的初學者閱讀學習,有需要的小伙伴參考下。
    2015-03-03
  • 詳解C語言通過遞歸與非遞歸實現(xiàn)蛇形矩陣

    詳解C語言通過遞歸與非遞歸實現(xiàn)蛇形矩陣

    蛇形矩陣(Snake matrix)是矩陣的一種,常被應用在編程題目與數(shù)學數(shù)列中,需要提取每條斜線里最小的數(shù)字,本篇文章將會通過遞歸和非遞歸來分別實現(xiàn)蛇形矩陣
    2022-02-02
  • C++提取文件中信息的方法

    C++提取文件中信息的方法

    這篇文章主要為大家詳細介紹了C++提取文件中信息的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C++類中隱藏的幾個默認函數(shù)你知道嗎

    C++類中隱藏的幾個默認函數(shù)你知道嗎

    這篇文章主要為大家詳細介紹了C++類中隱藏的幾個默認函數(shù),使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 用C語言實現(xiàn)簡單的三子棋

    用C語言實現(xiàn)簡單的三子棋

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)三子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 深入分析Linux下如何對C語言進行編程

    深入分析Linux下如何對C語言進行編程

    本篇文章介紹了,如何在Linux下對C語言進行編程的詳細概述。需要的朋友參考下
    2013-05-05
  • C/C++中可變參數(shù)的用法詳細解析

    C/C++中可變參數(shù)的用法詳細解析

    可變參數(shù)的使用方法遠遠不止以下介紹的幾種,不過在C,C++中使用可變參數(shù)時要小心,在使用printf()等函數(shù)時傳入的參數(shù)個數(shù)一定不能比前面的格式化字符串中的’%’符號個數(shù)少,否則會產(chǎn)生訪問越界,運氣不好的話還會導致程序崩潰
    2013-09-09

最新評論