Qt的QChart是一個用于繪制圖表和可視化數(shù)據(jù)的類。提供了一個靈活的、可擴展的、跨平臺的圖表繪制解決方案,可以用于各種應用程序,如數(shù)據(jù)分析、科學計算、金融交易等。
QChart支持多種類型的圖表,包括折線圖、散點圖、柱狀圖、餅圖等。它還支持多個數(shù)據(jù)系列(datasets)在同一個圖表中顯示,并且可以自定義各種圖表屬性和樣式,如坐標軸標簽、標題、圖例等。
QChart還支持多種數(shù)據(jù)源(data sources),可以來自Qt的數(shù)據(jù)模型(data models)、CSV文件、JSON文件等。數(shù)據(jù)源可以是任何支持迭代器(iterator)的類型,因此可以輕松地與其他Qt組件集成。
(資料圖)
使用QChart可以輕松地創(chuàng)建交互式圖表,如鼠標懸停提示(hover tooltip)、數(shù)據(jù)選擇(data selection)等。此外,QChart還支持多種主題(themes)和自定義CSS樣式,使得圖表外觀可以靈活地定制。
以下是使用Qt(C++)的QChart模塊顯示3個設備的動態(tài)溫度曲線的代碼實現(xiàn):
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(); // 更新數(shù)據(jù)槽函數(shù) ? private: Ui::MainWindow *ui; QTimer *m_timer; // 定時器? QChart *m_chart; // 圖表指針 ? QLineSeries *m_series1; // 設備1溫度曲線 QLineSeries *m_series2; // 設備2溫度曲線 QLineSeries *m_series3; // 設備3溫度曲線 ? int m_timeCount; // 時間計數(shù) }; ? #endif // MAINWINDOW_Hmainwindow.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)建溫度曲線圖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)建溫度曲線圖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)建溫度曲線圖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ù)據(jù) connect(m_timer, &QTimer::timeout, this, &MainWindow::updateChartData); m_timer- >start(1000); // 每隔1秒鐘更新一次數(shù)據(jù) ? // 將圖表添加到ChartView中 ui- >chartView- >setChart(m_chart); ui- >chartView- >setRenderHint(QPainter::Antialiasing); } ? MainWindow::~MainWindow() { delete ui; } ? void MainWindow::updateChartData() { // 更新時間計數(shù) m_timeCount++; ? // 在溫度曲線上增加一個點,模擬溫度數(shù)據(jù)變化 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); ? // 清除多余的點,只保留最新的30個數(shù)據(jù)點 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); } }在此代碼中,定義了一個QTimer定時器對象,用于每隔一段時間更新溫度曲線數(shù)據(jù)。在定時器的timeout信號觸發(fā)時,調(diào)用updateChartData()槽函數(shù)來更新溫度曲線數(shù)據(jù),同時控制數(shù)據(jù)量不超過30個點。
在updateChartData()函數(shù)中,使用了qrand()函數(shù)來生成隨機的溫度數(shù)據(jù),模擬動態(tài)變化的效果??梢愿鶕?jù)實際情況修改此函數(shù)的實現(xiàn)方式。
最后,將圖表添加到QChartView控件中,并啟用抗鋸齒功能以提高顯示質(zhì)量。
為了保證曲線顯示一直在可見范圍內(nèi),可以添加如下代碼:
// 使圖表自適應大小,確保曲線始終可見 m_chart- >createDefaultAxes(); m_chart- >axisX()- >setRange(0, 30); m_chart- >axisY()- >setRange(0, 60);這段代碼的作用是讓圖表自適應大小,并設置橫軸范圍為0到30,縱軸范圍為0到60。這樣當新數(shù)據(jù)點增加到圖表之外時,圖表會自動調(diào)整大小和范圍,以確保曲線始終可見。
完整的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)建溫度曲線圖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)建溫度曲線圖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)建溫度曲線圖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); ? // 使圖表自適應大小,確保曲線始終可見 m_chart- >createDefaultAxes(); m_chart- >axisX()- >setRange(0, 30); m_chart- >axisY()- >setRange(0, 60); ? // 定時更新數(shù)據(jù) connect(m_timer, &QTimer::timeout, this, &MainWindow::updateChartData); m_timer- >start(1000); // 每隔1秒鐘更新一次數(shù)據(jù) ? // 將圖表添加到ChartView中 ui- >chartView- >setChart(m_chart); ui- >chartView- >setRenderHint(QPainter::Antialiasing); } ? MainWindow::~MainWindow() { delete ui; } ? void MainWindow::updateChartData() { // 更新時間計數(shù) m_timeCount++; ? // 在溫度曲線上增加一個點,模擬溫度數(shù)據(jù)變化 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); ? // 清除多余的點,只保留最新的30個數(shù)據(jù)點 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); } }要實現(xiàn)折線圖的橫坐標可以拖動,可以設置QChartView的交互模式為拖拽,在構造函數(shù)中添加如下代碼:
// 設置 ChartView 交互模式為拖拽 ui- >chartView- >setRubberBand(QChartView::HorizontalRubberBand); ui- >chartView- >setRenderHint(QPainter::Antialiasing); ui- >chartView- >setDragMode(QGraphicsView::ScrollHandDrag);這樣用戶就可以通過鼠標左鍵在橫軸上拖拽來改變曲線圖的可見范圍。同時,還需要在mainwindow.cpp中添加橫坐標的范圍更新函數(shù)updateAxisRange(),用于在拖拽時更新橫坐標的范圍。
完整的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)建溫度曲線圖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)建溫度曲線圖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)建溫度曲線圖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); ? // 使圖表自適應大小,確保曲線始終可見 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ù)據(jù) connect(m_timer, &QTimer::timeout, this, &MainWindow::updateChartData); m_timer- >start(1000); // 每隔1秒鐘更新一次數(shù)據(jù) ? // 將圖表添加到ChartView中 ui- >chartView- >setChart(m_chart); } ? MainWindow::~MainWindow() { delete ui; } ? void MainWindow::updateChartData() { // 更新時間計數(shù) m_timeCount++; ? // 在溫度曲線上增加一個點,模擬溫度數(shù)據(jù)變化 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); ? // 清除多余的點,只保留最新的30個數(shù)據(jù)點 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中添加了一個新函數(shù)updateAxisRange()。該函數(shù)會在數(shù)據(jù)更新時被調(diào)用來計算最新的橫軸范圍,以更新折線圖的顯示。
當前這份完整代碼實現(xiàn)了一個動態(tài)折線圖的繪制,是一個典型的Qt Charts應用程序。通過使用QLineSeries類、QValueAxis類和QChart類來創(chuàng)建并顯示溫度隨時間變化的折線圖。
第一步:先創(chuàng)建了主窗口,其中包含一個QChartView控件,用于顯示溫度曲線圖。在構造函數(shù)中,設置了一些基本屬性,比如標題、橫縱坐標的范圍和名稱等,并為每個設備創(chuàng)建了一個QLineSeries對象,用于存儲溫度數(shù)據(jù)。
第二步:將這些QLineSeries對象添加到QChart對象中。接著,將QValueAxis對象添加到QChart中,設置其范圍和名稱,并將QLineSeries對象與其關聯(lián)。最后,將QChart對象添加到QChartView中,以便在界面上顯示折線圖。
第三步:在updateChartData()函數(shù)中,定時器每隔1秒鐘觸發(fā)一次,用于更新溫度數(shù)據(jù),并通過調(diào)用QLineSeries類的append()函數(shù)向QLineSeries對象中添加新的溫度數(shù)據(jù)點。同時,使用removePoints()函數(shù)刪除舊的數(shù)據(jù)點,以保持折線圖中顯示的數(shù)據(jù)點不超過30個。在添加或刪除數(shù)據(jù)時,使用updateAxisRange()函數(shù)更新橫坐標的范圍,以便將折線圖自適應地縮放到當前數(shù)據(jù)范圍內(nèi)。
第四步:重載了updateAxisRange()函數(shù),根據(jù)QLineSeries對象的數(shù)據(jù)點計算出橫坐標的最小值和最大值,并通過調(diào)用QChart類的axisX()->setRange()函數(shù)更新QValueAxis對象的范圍。
#include "widget.h" #include "ui_widget.h" ? Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui- >setupUi(this); ? this- >setWindowTitle("溫度數(shù)據(jù)可視化采集系統(tǒng)"); ? 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)建溫度曲線圖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)建溫度曲線圖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)建溫度曲線圖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("時間 (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); ? // 使圖表自適應大小,確保曲線始終可見 m_chart- >createDefaultAxes(); m_chart- >axisX()- >setRange(0, 30); m_chart- >axisY()- >setRange(0, 60); ? ? // 定時更新數(shù)據(jù) 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++; ? // 在溫度曲線上增加一個點,模擬溫度數(shù)據(jù)變化 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); ? // 清除多余的點,只保留最新的30個數(shù)據(jù)點 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); } ? ? ? //開始采集 void Widget::on_pushButton_start_clicked() { m_timer- >start(1000); // 每隔1秒鐘更新一次數(shù)據(jù) } ? ? //停止采集 void Widget::on_pushButton_stop_clicked() { m_timer- >stop(); //停止定時器 }#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(); // 更新數(shù)據(jù)槽函數(shù) void updateAxisRange(); ? void on_pushButton_start_clicked(); ? void on_pushButton_stop_clicked(); ? private: Ui::Widget *ui; ? QTimer *m_timer; // 定時器 ? QChart *m_chart; // 圖表指針 ? QLineSeries *m_series1; // 設備1溫度曲線 QLineSeries *m_series2; // 設備2溫度曲線 QLineSeries *m_series3; // 設備3溫度曲線 ? int m_timeCount; // 時間計數(shù) }; #endif // WIDGET_H< ?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 >開始采集< /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 >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ā)布的圖文一切為分享交流,傳播正能量,此文不保證數(shù)據(jù)的準確性,內(nèi)容僅供參考
關鍵詞:
Qt(C++)使用QChart動態(tài)顯示3個設備的溫度變化曲線
Qt的QChart是一個用于繪制圖表和可視化數(shù)據(jù)的類。提供了一個靈活的、可擴展的、跨平臺的圖表繪制解決方案,
李白一生經(jīng)歷的五個時期是那些時期(李白一生經(jīng)歷的五個時期是那些)
想必現(xiàn)在有很多小伙伴對于李白一生經(jīng)歷的五個時期是那些方面的知識都比較想要了解,那么今天小好小編就為大
環(huán)球熱點!丘成桐暢談數(shù)學人生:培養(yǎng)偉大數(shù)學家要“順其自然”
“我很喜歡讀《左傳》《史記》,它們教會了我求真、求美。”6月1日下午,國際數(shù)學最高獎菲爾茲獎首位華人得
吉林省水環(huán)境質(zhì)量穩(wěn)步提升
光明日報長春6月1日電(記者任爽?見習記者李層)6月5日是“世界環(huán)境日”。6月1日,吉林省召開新聞發(fā)布會公
電動自行車換電有待加強頂層設計
電動自行車換電有待加強頂層設計(主題)工人日報—中工網(wǎng)記者郜亞章閱讀提示電動自行車換電站已在一些城市
最新版世界園林植物與花卉百科全書_對于最新版世界園林植物與花卉百科全書簡單介紹
1、《最新版世界園林植物與花卉百科全書》是2005年河南科學技術出版社出版的圖書,由皇家園藝學會編著。2、
病房里的歡樂“六一”
病房里的歡樂“六一”---近日由于春夏交接,氣溫反復,不少小朋友出現(xiàn)感冒、流感癥狀,2023年6月1日,在武
正商實業(yè)(00185.HK):6月1日南向資金增持9.9萬股
6月1日北向資金增持9 9萬股正商實業(yè)(00185 HK)。近5個交易日中,獲南向資金減持的有2天,累計凈減持10 7
體現(xiàn)漢字的有哪些古詩
1.??充??姹?瀛??????
抄寫作文網(wǎng)小編為大家提供體現(xiàn)漢字的有哪些古詩1 ??充??姹?瀛??????來供大家參考,歡迎閱讀。關
宇宙的三個終極問題,人類或許永遠也無法解開!
我們時常會聽到一些關于宇宙的各類猜測,而在宇宙中有一些問題是無法解答的,這些問題就是關于宇宙的終極問
Qt(C++)使用QChart動態(tài)顯示3個設備的溫度變化曲線
Qt的QChart是一個用于繪制圖表和可...
小米瀏覽器如何退出賬號?小米瀏覽器退出賬號的操作流程
小米瀏覽器如何退出賬號?小米瀏覽...
番茄小說怎么操作能下載導出?番茄小說下載導出的操作步驟
番茄小說怎么操作能下載導出?番茄...
如何在今日頭條極速版賺金幣?今日頭條極速版賺金幣的操作方式
如何在今日頭條極速版賺金幣?今日...
雙擊無法打開我的電腦怎么解決?Win11系統(tǒng)雙擊無法打開我的電腦解決教程
雙擊無法打開我的電腦怎么解決?Win...
電腦硬盤分區(qū)合并怎么操作?Win11系統(tǒng)硬盤分區(qū)合并的操作流程
電腦硬盤分區(qū)合并怎么操作?Win11...
電腦上的充電限制如何設置?Win11系統(tǒng)充電限制設置教程
電腦上的充電限制如何設置?Win11...
李白一生經(jīng)歷的五個時期是那些時期(李白一生經(jīng)歷的五個時期是那些)
想必現(xiàn)在有很多小伙伴對于李白一生...
正商實業(yè)(00185.HK):6月1日南向資金增持9.9萬股
6月1日北向資金增持9 9萬股正商實...
體現(xiàn)漢字的有哪些古詩
1.??充??姹?瀛??????
抄寫作文網(wǎng)小編為大家提供體現(xiàn)漢字...
宇宙的三個終極問題,人類或許永遠也無法解開!
我們時常會聽到一些關于宇宙的各類...
焦點消息!突發(fā)!基金經(jīng)理集體失業(yè)
而且,今年是AI技術的爆發(fā)之年,相...