您的位置:首頁(yè) >社會(huì ) > 正文

Qt(C++)使用QChart動(dòng)態(tài)顯示3個(gè)設備的溫度變化曲線(xiàn)

一、介紹

Qt的QChart是一個(gè)用于繪制圖表和可視化數據的類(lèi)。提供了一個(gè)靈活的、可擴展的、跨平臺的圖表繪制解決方案,可以用于各種應用程序,如數據分析、科學(xué)計算、金融交易等。

QChart支持多種類(lèi)型的圖表,包括折線(xiàn)圖、散點(diǎn)圖、柱狀圖、餅圖等。它還支持多個(gè)數據系列(datasets)在同一個(gè)圖表中顯示,并且可以自定義各種圖表屬性和樣式,如坐標軸標簽、標題、圖例等。

QChart還支持多種數據源(data sources),可以來(lái)自Qt的數據模型(data models)、CSV文件、JSON文件等。數據源可以是任何支持迭代器(iterator)的類(lèi)型,因此可以輕松地與其他Qt組件集成。


(資料圖)

使用QChart可以輕松地創(chuàng )建交互式圖表,如鼠標懸停提示(hover tooltip)、數據選擇(data selection)等。此外,QChart還支持多種主題(themes)和自定義CSS樣式,使得圖表外觀(guān)可以靈活地定制。

二、實(shí)現代碼(1)QMainWindow

以下是使用Qt(C++)的QChart模塊顯示3個(gè)設備的動(dòng)態(tài)溫度曲線(xiàn)的代碼實(shí)現:

【1】實(shí)現溫度動(dòng)態(tài)更新

mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H ? #include < QMainWindow > #include < QtCharts/QChart > #include < QtCharts/QLineSeries > #include < QTimer > ? QT_CHARTS_USE_NAMESPACE ? namespace Ui { class MainWindow; } ? class MainWindow : public QMainWindow {     Q_OBJECT ? public:     explicit MainWindow(QWidget *parent = nullptr);     ~MainWindow(); ? private slots:     void updateChartData(); // 更新數據槽函數 ? private:     Ui::MainWindow *ui;     QTimer *m_timer; // 定時(shí)器?     QChart *m_chart; // 圖表指針 ?     QLineSeries *m_series1; // 設備1溫度曲線(xiàn)     QLineSeries *m_series2; // 設備2溫度曲線(xiàn)     QLineSeries *m_series3; // 設備3溫度曲線(xiàn) ?     int m_timeCount; // 時(shí)間計數 }; ? #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h" #include "ui_mainwindow.h" ? MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow),     m_timer(new QTimer(this)),     m_chart(new QChart()),     m_series1(new QLineSeries()),     m_series2(new QLineSeries()),     m_series3(new QLineSeries()),     m_timeCount(0) {     ui- >setupUi(this); ?     // 設置圖表標題     m_chart- >setTitle("Temperature Data"); ?     // 創(chuàng  )建溫度曲線(xiàn)圖1并設置屬性     m_series1- >setName(tr("Device 1"));     m_series1- >setColor(Qt::red);     m_series1- >setPen(QPen(Qt::red, 2));     m_chart- >addSeries(m_series1); ?     // 創(chuàng  )建溫度曲線(xiàn)圖2并設置屬性     m_series2- >setName(tr("Device 2"));     m_series2- >setColor(Qt::green);     m_series2- >setPen(QPen(Qt::green, 2));     m_chart- >addSeries(m_series2); ?     // 創(chuàng  )建溫度曲線(xiàn)圖3并設置屬性     m_series3- >setName(tr("Device 3"));     m_series3- >setColor(Qt::blue);     m_series3- >setPen(QPen(Qt::blue, 2));     m_chart- >addSeries(m_series3); ?     // 設置橫軸屬性     QValueAxis *axisX = new QValueAxis;     axisX- >setRange(0, 30);     axisX- >setTitleText("Time (s)");     m_chart- >addAxis(axisX, Qt::AlignBottom);     m_series1- >attachAxis(axisX);     m_series2- >attachAxis(axisX);     m_series3- >attachAxis(axisX); ?     // 設置縱軸屬性     QValueAxis *axisY = new QValueAxis;     axisY- >setRange(0, 60);     axisY- >setTitleText("Temperature (℃)");     m_chart- >addAxis(axisY, Qt::AlignLeft);     m_series1- >attachAxis(axisY);     m_series2- >attachAxis(axisY);     m_series3- >attachAxis(axisY); ?     // 定時(shí)更新數據     connect(m_timer, &QTimer::timeout, this, &MainWindow::updateChartData);     m_timer- >start(1000); // 每隔1秒鐘更新一次數據 ?     // 將圖表添加到ChartView中     ui- >chartView- >setChart(m_chart);     ui- >chartView- >setRenderHint(QPainter::Antialiasing); } ? MainWindow::~MainWindow() {     delete ui; } ? void MainWindow::updateChartData() {     // 更新時(shí)間計數     m_timeCount++; ?     // 在溫度曲線(xiàn)上增加一個(gè)點(diǎn),模擬溫度數據變化     QPointF p1(m_timeCount, qrand() % 10 + 20);     QPointF p2(m_timeCount, qrand() % 10 + 30);     QPointF p3(m_timeCount, qrand() % 10 + 40);     m_series1- >append(p1);     m_series2- >append(p2);     m_series3- >append(p3); ?     // 清除多余的點(diǎn),只保留最新的30個(gè)數據點(diǎn)     if (m_series1- >count() > 30) {         m_series1- >removePoints(0, 1);     }     if (m_series2- >count() > 30) {         m_series2- >removePoints(0, 1);     }     if (m_series3- >count() > 30) {         m_series3- >removePoints(0, 1);     } }

在此代碼中,定義了一個(gè)QTimer定時(shí)器對象,用于每隔一段時(shí)間更新溫度曲線(xiàn)數據。在定時(shí)器的timeout信號觸發(fā)時(shí),調用updateChartData()槽函數來(lái)更新溫度曲線(xiàn)數據,同時(shí)控制數據量不超過(guò)30個(gè)點(diǎn)。

在updateChartData()函數中,使用了qrand()函數來(lái)生成隨機的溫度數據,模擬動(dòng)態(tài)變化的效果??梢愿鶕?shí)際情況修改此函數的實(shí)現方式。

最后,將圖表添加到QChartView控件中,并啟用抗鋸齒功能以提高顯示質(zhì)量。

【2】設置曲線(xiàn)可見(jiàn)范圍

為了保證曲線(xiàn)顯示一直在可見(jiàn)范圍內,可以添加如下代碼:

// 使圖表自適應大小,確保曲線(xiàn)始終可見(jiàn)     m_chart- >createDefaultAxes();     m_chart- >axisX()- >setRange(0, 30);     m_chart- >axisY()- >setRange(0, 60);

這段代碼的作用是讓圖表自適應大小,并設置橫軸范圍為0到30,縱軸范圍為0到60。這樣當新數據點(diǎn)增加到圖表之外時(shí),圖表會(huì )自動(dòng)調整大小和范圍,以確保曲線(xiàn)始終可見(jiàn)。

完整的mainwindow.cpp代碼如下所示:

#include "mainwindow.h"     #include "ui_mainwindow.h"     ?     MainWindow::MainWindow(QWidget *parent) :         QMainWindow(parent),         ui(new Ui::MainWindow),         m_timer(new QTimer(this)),         m_chart(new QChart()),         m_series1(new QLineSeries()),         m_series2(new QLineSeries()),         m_series3(new QLineSeries()),         m_timeCount(0)     {         ui- >setupUi(this);     ?         // 設置圖表標題         m_chart- >setTitle("Temperature Data");     ?         // 創(chuàng  )建溫度曲線(xiàn)圖1并設置屬性         m_series1- >setName(tr("Device 1"));         m_series1- >setColor(Qt::red);         m_series1- >setPen(QPen(Qt::red, 2));         m_chart- >addSeries(m_series1);     ?         // 創(chuàng  )建溫度曲線(xiàn)圖2并設置屬性         m_series2- >setName(tr("Device 2"));         m_series2- >setColor(Qt::green);         m_series2- >setPen(QPen(Qt::green, 2));         m_chart- >addSeries(m_series2);     ?         // 創(chuàng  )建溫度曲線(xiàn)圖3并設置屬性         m_series3- >setName(tr("Device 3"));         m_series3- >setColor(Qt::blue);         m_series3- >setPen(QPen(Qt::blue, 2));         m_chart- >addSeries(m_series3);     ?         // 設置橫軸屬性         QValueAxis *axisX = new QValueAxis;         axisX- >setRange(0, 30);         axisX- >setTitleText("Time (s)");         m_chart- >addAxis(axisX, Qt::AlignBottom);         m_series1- >attachAxis(axisX);         m_series2- >attachAxis(axisX);         m_series3- >attachAxis(axisX);     ?         // 設置縱軸屬性         QValueAxis *axisY = new QValueAxis;         axisY- >setRange(0, 60);         axisY- >setTitleText("Temperature (℃)");         m_chart- >addAxis(axisY, Qt::AlignLeft);         m_series1- >attachAxis(axisY);         m_series2- >attachAxis(axisY);         m_series3- >attachAxis(axisY);     ?         // 使圖表自適應大小,確保曲線(xiàn)始終可見(jiàn)         m_chart- >createDefaultAxes();         m_chart- >axisX()- >setRange(0, 30);         m_chart- >axisY()- >setRange(0, 60);     ?         // 定時(shí)更新數據         connect(m_timer, &QTimer::timeout, this, &MainWindow::updateChartData);         m_timer- >start(1000); // 每隔1秒鐘更新一次數據     ?         // 將圖表添加到ChartView中         ui- >chartView- >setChart(m_chart);         ui- >chartView- >setRenderHint(QPainter::Antialiasing);     }     ?     MainWindow::~MainWindow()     {         delete ui;     }     ?     void MainWindow::updateChartData()     {         // 更新時(shí)間計數         m_timeCount++;     ?         // 在溫度曲線(xiàn)上增加一個(gè)點(diǎn),模擬溫度數據變化         QPointF p1(m_timeCount, qrand() % 10 + 20);         QPointF p2(m_timeCount, qrand() % 10 + 30);         QPointF p3(m_timeCount, qrand() % 10 + 40);         m_series1- >append(p1);         m_series2- >append(p2);         m_series3- >append(p3);     ?         // 清除多余的點(diǎn),只保留最新的30個(gè)數據點(diǎn)         if (m_series1- >count() > 30) {             m_series1- >removePoints(0, 1);         }         if (m_series2- >count() > 30) {             m_series2- >removePoints(0, 1);         }         if (m_series3- >count() > 30) {             m_series3- >removePoints(0, 1);         }     }

【3】實(shí)現鼠標交互拖動(dòng)

要實(shí)現折線(xiàn)圖的橫坐標可以拖動(dòng),可以設置QChartView的交互模式為拖拽,在構造函數中添加如下代碼:

// 設置 ChartView 交互模式為拖拽     ui- >chartView- >setRubberBand(QChartView::HorizontalRubberBand);     ui- >chartView- >setRenderHint(QPainter::Antialiasing);     ui- >chartView- >setDragMode(QGraphicsView::ScrollHandDrag);

這樣用戶(hù)就可以通過(guò)鼠標左鍵在橫軸上拖拽來(lái)改變曲線(xiàn)圖的可見(jiàn)范圍。同時(shí),還需要在mainwindow.cpp中添加橫坐標的范圍更新函數updateAxisRange(),用于在拖拽時(shí)更新橫坐標的范圍。

完整的mainwindow.cpp代碼如下所示:

#include "mainwindow.h"     #include "ui_mainwindow.h"     ?     MainWindow::MainWindow(QWidget *parent) :         QMainWindow(parent),         ui(new Ui::MainWindow),         m_timer(new QTimer(this)),         m_chart(new QChart()),         m_series1(new QLineSeries()),         m_series2(new QLineSeries()),         m_series3(new QLineSeries()),         m_timeCount(0)     {         ui- >setupUi(this);     ?         // 設置圖表標題         m_chart- >setTitle("Temperature Data");     ?         // 創(chuàng  )建溫度曲線(xiàn)圖1并設置屬性         m_series1- >setName(tr("Device 1"));         m_series1- >setColor(Qt::red);         m_series1- >setPen(QPen(Qt::red, 2));         m_chart- >addSeries(m_series1);     ?         // 創(chuàng  )建溫度曲線(xiàn)圖2并設置屬性         m_series2- >setName(tr("Device 2"));         m_series2- >setColor(Qt::green);         m_series2- >setPen(QPen(Qt::green, 2));         m_chart- >addSeries(m_series2);     ?         // 創(chuàng  )建溫度曲線(xiàn)圖3并設置屬性         m_series3- >setName(tr("Device 3"));         m_series3- >setColor(Qt::blue);         m_series3- >setPen(QPen(Qt::blue, 2));         m_chart- >addSeries(m_series3);     ?         // 設置橫軸屬性         QValueAxis *axisX = new QValueAxis;         axisX- >setRange(0, 30);         axisX- >setTitleText("Time (s)");         m_chart- >addAxis(axisX, Qt::AlignBottom);         m_series1- >attachAxis(axisX);         m_series2- >attachAxis(axisX);         m_series3- >attachAxis(axisX);     ?         // 設置縱軸屬性         QValueAxis *axisY = new QValueAxis;         axisY- >setRange(0, 60);         axisY- >setTitleText("Temperature (℃)");         m_chart- >addAxis(axisY, Qt::AlignLeft);         m_series1- >attachAxis(axisY);         m_series2- >attachAxis(axisY);         m_series3- >attachAxis(axisY);     ?         // 使圖表自適應大小,確保曲線(xiàn)始終可見(jiàn)         m_chart- >createDefaultAxes();         m_chart- >axisX()- >setRange(0, 30);         m_chart- >axisY()- >setRange(0, 60);     ?         // 設置 ChartView 交互模式為拖拽         ui- >chartView- >setRubberBand(QChartView::HorizontalRubberBand);         ui- >chartView- >setRenderHint(QPainter::Antialiasing);         ui- >chartView- >setDragMode(QGraphicsView::ScrollHandDrag);     ?         // 定時(shí)更新數據         connect(m_timer, &QTimer::timeout, this, &MainWindow::updateChartData);         m_timer- >start(1000); // 每隔1秒鐘更新一次數據     ?         // 將圖表添加到ChartView中         ui- >chartView- >setChart(m_chart);     }     ?     MainWindow::~MainWindow()     {         delete ui;     }     ?     void MainWindow::updateChartData()     {         // 更新時(shí)間計數         m_timeCount++;     ?         // 在溫度曲線(xiàn)上增加一個(gè)點(diǎn),模擬溫度數據變化         QPointF p1(m_timeCount, qrand() % 10 + 20);         QPointF p2(m_timeCount, qrand() % 10 + 30);         QPointF p3(m_timeCount, qrand() % 10 + 40);         m_series1- >append(p1);         m_series2- >append(p2);         m_series3- >append(p3);     ?         // 清除多余的點(diǎn),只保留最新的30個(gè)數據點(diǎn)         if (m_series1- >count() > 30) {             m_series1- >removePoints(0, 1);         }         if (m_series2- >count() > 30) {             m_series2- >removePoints(0, 1);         }         if (m_series3- >count() > 30) {             m_series3- >removePoints(0, 1);         }     ?         // 更新橫軸范圍         updateAxisRange();     }     ?     void MainWindow::updateAxisRange()     {         // 獲取橫軸范圍         qreal minX = std::numeric_limits< qreal >::max();         qreal maxX = std::numeric_limits< qreal >::min();         foreach (QAbstractSeries *series, m_chart- >series()) {             QXYSeries *xySeries = static_cast< QXYSeries* >(series);             QPointF p1 = xySeries- >at(0);             QPointF p2 = xySeries- >at(xySeries- >count() - 1);     ?             if (p1.x() < minX) {                 minX = p1.x();             }             if (p2.x() > maxX) {                 maxX = p2.x();             }         }     ?         // 更新橫軸范圍         m_chart- >axisX()- >setRange(minX, maxX);     }

為了更新橫坐標的范圍,需要在MainWindow中添加了一個(gè)新函數updateAxisRange()。該函數會(huì )在數據更新時(shí)被調用來(lái)計算最新的橫軸范圍,以更新折線(xiàn)圖的顯示。

三、實(shí)現代碼(2)QWidget

當前這份完整代碼實(shí)現了一個(gè)動(dòng)態(tài)折線(xiàn)圖的繪制,是一個(gè)典型的Qt Charts應用程序。通過(guò)使用QLineSeries類(lèi)、QValueAxis類(lèi)和QChart類(lèi)來(lái)創(chuàng )建并顯示溫度隨時(shí)間變化的折線(xiàn)圖。

第一步:先創(chuàng )建了主窗口,其中包含一個(gè)QChartView控件,用于顯示溫度曲線(xiàn)圖。在構造函數中,設置了一些基本屬性,比如標題、橫縱坐標的范圍和名稱(chēng)等,并為每個(gè)設備創(chuàng )建了一個(gè)QLineSeries對象,用于存儲溫度數據。

第二步:將這些QLineSeries對象添加到QChart對象中。接著(zhù),將QValueAxis對象添加到QChart中,設置其范圍和名稱(chēng),并將QLineSeries對象與其關(guān)聯(lián)。最后,將QChart對象添加到QChartView中,以便在界面上顯示折線(xiàn)圖。

第三步:在updateChartData()函數中,定時(shí)器每隔1秒鐘觸發(fā)一次,用于更新溫度數據,并通過(guò)調用QLineSeries類(lèi)的append()函數向QLineSeries對象中添加新的溫度數據點(diǎn)。同時(shí),使用removePoints()函數刪除舊的數據點(diǎn),以保持折線(xiàn)圖中顯示的數據點(diǎn)不超過(guò)30個(gè)。在添加或刪除數據時(shí),使用updateAxisRange()函數更新橫坐標的范圍,以便將折線(xiàn)圖自適應地縮放到當前數據范圍內。

第四步:重載了updateAxisRange()函數,根據QLineSeries對象的數據點(diǎn)計算出橫坐標的最小值和最大值,并通過(guò)調用QChart類(lèi)的axisX()->setRange()函數更新QValueAxis對象的范圍。

【1】widget.cpp代碼

#include "widget.h"     #include "ui_widget.h"     ?     Widget::Widget(QWidget *parent)         : QWidget(parent)         , ui(new Ui::Widget)     {         ui- >setupUi(this);     ?         this- >setWindowTitle("溫度數據可視化采集系統");     ?         m_timer=new QTimer(this);         m_chart=new QChart();     ?         m_series1=new QLineSeries();         m_series2=new QLineSeries();         m_series3=new QLineSeries();     ?         m_timeCount=0;     ?         // 創(chuàng  )建溫度曲線(xiàn)圖1并設置屬性         m_series1- >setName(tr("設備1"));     //    m_series1- >setColor(Qt::red);     //    m_series1- >setPen(QPen(Qt::red, 2));         m_chart- >addSeries(m_series1);     ?         // 創(chuàng  )建溫度曲線(xiàn)圖2并設置屬性         m_series2- >setName(tr("設備2"));     //    m_series2- >setColor(Qt::green);     //    m_series2- >setPen(QPen(Qt::green, 2));         m_chart- >addSeries(m_series2);     ?         // 創(chuàng  )建溫度曲線(xiàn)圖3并設置屬性         m_series3- >setName(tr("設備3"));     //    m_series3- >setColor(Qt::blue);     //    m_series3- >setPen(QPen(Qt::blue, 2));         m_chart- >addSeries(m_series3);     ?         // 設置橫軸屬性         QValueAxis *axisX = new QValueAxis;         axisX- >setRange(0, 30);         axisX- >setTitleText("時(shí)間 (s)");         m_chart- >addAxis(axisX, Qt::AlignBottom);         m_series1- >attachAxis(axisX);         m_series2- >attachAxis(axisX);         m_series3- >attachAxis(axisX);     ?         // 設置縱軸屬性         QValueAxis *axisY = new QValueAxis;         axisY- >setRange(0, 60);         axisY- >setTitleText("溫度 (℃)");         m_chart- >addAxis(axisY, Qt::AlignLeft);         m_series1- >attachAxis(axisY);         m_series2- >attachAxis(axisY);         m_series3- >attachAxis(axisY);     ?         // 使圖表自適應大小,確保曲線(xiàn)始終可見(jiàn)           m_chart- >createDefaultAxes();           m_chart- >axisX()- >setRange(0, 30);           m_chart- >axisY()- >setRange(0, 60);     ?     ?         // 定時(shí)更新數據         connect(m_timer, &QTimer::timeout, this, &Widget::updateChartData);     ?         // 將圖表添加到ChartView中         QChartView* chartView = new QChartView(m_chart);     ?         // 設置 ChartView 交互模式為拖拽         chartView- >setRubberBand(QChartView::HorizontalRubberBand);         chartView- >setRenderHint(QPainter::Antialiasing);         chartView- >setDragMode(QGraphicsView::ScrollHandDrag);     ?         chartView- >setRenderHint(QPainter::Antialiasing);     ?         //將視圖添加到布局         ui- >view_verticalLayout- >addWidget(chartView);     }     ?     ?     ?     Widget::~Widget()     {         delete ui;     }     ?     ?     void Widget::updateChartData()     {         // 更新時(shí)間計數         m_timeCount++;     ?         // 在溫度曲線(xiàn)上增加一個(gè)點(diǎn),模擬溫度數據變化         QPointF p1(m_timeCount, qrand() % 10 + 20);         QPointF p2(m_timeCount, qrand() % 10 + 30);         QPointF p3(m_timeCount, qrand() % 10 + 40);         m_series1- >append(p1);         m_series2- >append(p2);         m_series3- >append(p3);     ?         // 清除多余的點(diǎn),只保留最新的30個(gè)數據點(diǎn)         if (m_series1- >count() > 30) {             m_series1- >removePoints(0, 1);         }         if (m_series2- >count() > 30) {             m_series2- >removePoints(0, 1);         }         if (m_series3- >count() > 30) {             m_series3- >removePoints(0, 1);         }     ?         // 更新橫軸范圍         updateAxisRange();     }     ?     ?     void Widget::updateAxisRange()     {         // 獲取橫軸范圍         qreal minX = std::numeric_limits< qreal >::max();         qreal maxX = std::numeric_limits< qreal >::min();         foreach (QAbstractSeries *series, m_chart- >series()) {             QXYSeries *xySeries = static_cast< QXYSeries* >(series);             QPointF p1 = xySeries- >at(0);             QPointF p2 = xySeries- >at(xySeries- >count() - 1);     ?             if (p1.x() < minX) {                 minX = p1.x();             }             if (p2.x() > maxX) {                 maxX = p2.x();             }         }     ?         // 更新橫軸范圍         m_chart- >axisX()- >setRange(minX, maxX);     }     ?     ?     ?     //開(kāi)始采集     void Widget::on_pushButton_start_clicked()     {         m_timer- >start(1000); // 每隔1秒鐘更新一次數據     }     ?     ?     //停止采集     void Widget::on_pushButton_stop_clicked()     {         m_timer- >stop(); //停止定時(shí)器     }

【2】widget.h代碼

#ifndef WIDGET_H     #define WIDGET_H     ?     #include < QWidget >     ?     // 包含line chart需要的頭文件     #include < QtCharts/QChart >     #include < QtCharts/QLineSeries >     #include < QtCharts/QChartView >     #include < QtCore/QRandomGenerator >     #include < QValueAxis >     #include < QScatterSeries >     #include < QTimer >     ?     // 引用命名空間     QT_CHARTS_USE_NAMESPACE     ?     QT_BEGIN_NAMESPACE     namespace Ui { class Widget; }     QT_END_NAMESPACE     ?     class Widget : public QWidget     {         Q_OBJECT     ?     public:         Widget(QWidget *parent = nullptr);         ~Widget();     private slots:         void updateChartData(); // 更新數據槽函數         void updateAxisRange();     ?         void on_pushButton_start_clicked();     ?         void on_pushButton_stop_clicked();     ?     private:         Ui::Widget *ui;     ?         QTimer *m_timer; // 定時(shí)器     ?         QChart *m_chart; // 圖表指針     ?         QLineSeries *m_series1; // 設備1溫度曲線(xiàn)         QLineSeries *m_series2; // 設備2溫度曲線(xiàn)         QLineSeries *m_series3; // 設備3溫度曲線(xiàn)     ?         int m_timeCount; // 時(shí)間計數     };     #endif // WIDGET_H

【3】UI文件代碼

< ?xml version="1.0" encoding="UTF-8"? >    < ui version="4.0" >     < class >Widget< /class >     < widget class="QWidget" name="Widget" >      < property name="geometry" >       < rect >        < x >0< /x >        < y >0< /y >        < width >600< /width >        < height >444< /height >       < /rect >      < /property >      < property name="windowTitle" >       < string >Widget< /string >      < /property >      < layout class="QVBoxLayout" name="verticalLayout" >       < item >        < widget class="QWidget" name="widget" native="true" >         < property name="minimumSize" >          < size >           < width >100< /width >           < height >100< /height >          < /size >         < /property >         < layout class="QVBoxLayout" name="verticalLayout_2" >          < property name="spacing" >           < number >0< /number >          < /property >          < property name="leftMargin" >           < number >0< /number >          < /property >          < property name="topMargin" >           < number >0< /number >          < /property >          < property name="rightMargin" >           < number >0< /number >          < /property >          < property name="bottomMargin" >           < number >0< /number >          < /property >          < item >           < layout class="QVBoxLayout" name="view_verticalLayout"/ >          < /item >         < /layout >        < /widget >       < /item >       < item >        < widget class="QWidget" name="widget_2" native="true" >         < property name="maximumSize" >          < size >           < width >16777215< /width >           < height >40< /height >          < /size >         < /property >         < layout class="QHBoxLayout" name="horizontalLayout" >          < property name="spacing" >           < number >0< /number >          < /property >          < property name="leftMargin" >           < number >0< /number >          < /property >          < property name="topMargin" >           < number >0< /number >          < /property >          < property name="rightMargin" >           < number >0< /number >          < /property >          < property name="bottomMargin" >           < number >0< /number >          < /property >          < item >           < widget class="QPushButton" name="pushButton_start" >            < property name="text" >             < string >開(kāi)始采集< /string >            < /property >           < /widget >          < /item >          < item >           < widget class="QPushButton" name="pushButton_stop" >            < property name="text" >             < string >停止采集< /string >            < /property >           < /widget >          < /item >         < /layout >        < /widget >       < /item >      < /layout >     < /widget >     < resources/ >     < connections/ >    < /ui >

【4】pro工程文件

QT       += core gui    QT       += charts    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets    CONFIG += c++11    # The following define makes your compiler emit warnings if you use    # any Qt feature that has been marked deprecated (the exact warnings    # depend on your compiler). Please consult the documentation of the    # deprecated API in order to know how to port your code away from it.    DEFINES += QT_DEPRECATED_WARNINGS    # You canalso make your code fail to compile if it uses deprecated APIs.    # In order to do so, uncomment the following line.    # You can also select to disable deprecated APIs only up to a certain version of Qt.    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0    SOURCES += \\        main.cpp \\        widget.cpp    HEADERS+= \\        widget.h    FORMS += \\        widget.ui    # Default rules for deployment.    qnx: target.path = /tmp/$${TARGET}/bin    else: unix:!android: target.path = /opt/$${TARGET}/bin    !isEmpty(target.path): INSTALLS += target

審核編輯 黃宇

免責聲明:本文不構成任何商業(yè)建議,投資有風(fēng)險,選擇需謹慎!本站發(fā)布的圖文一切為分享交流,傳播正能量,此文不保證數據的準確性,內容僅供參考

關(guān)鍵詞:

相關(guān)內容

熱門(mén)資訊

最新圖文

国产福利萌白酱精品一区|国产成人久久精品流白浆|国产一级A级免费视频|久久综合亚洲鲁鲁五月天欧|欧美黑人巨大视频HD