1. 程式人生 > 其它 >QT之資料顯示

QT之資料顯示

引言

  目前,為了提高資料校對的效率,使用合理的顯示工具完成具體的資料處理,可以加速設計中除錯的速度,這也是自行設計上位機的意義所在。資料處理在LabVIEW中是比較簡單的,直接呼叫即可。在QT中可能需要採用其他的模組。

學習

  QT5中比較快捷地實現圖表的方式是QtCharts庫,內建的QChartView和QLineSeries可以完成座標軸和資料線的建立,配合其他類,可以快速完成一個折線圖的建立,可以用於記錄資料的變化,在資料處理上有較大的意義。這裡以這個圖為模組,對檔案中的資料進行處理。

  需要注意的點不多,一個是pro中不要忘記新增qt += charts,還有是名稱空間QT_CHARTS_USE_NAMESPACE,然後是三個關鍵變數QChart、QLineSeries和座標QValueAxis。對這三個變數進行操作,就可以完成圖表的初始化和資料的重新整理。

目標

  作為測試用的上位機,記錄多個數據的變化趨勢是基本的功能。為了提高實用性,這裡也是基於檔案進行處理。處理過程中採用靈活的正則匹配方式,實現所有的資料的高速處理。預期使用txt文字完成多資料的變化顯示。

結構

圖表顯示

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
       ui->setupUi(this);

       m_series=new QLineSeries;
       m_chart=new QChart;

       m_series
=new QLineSeries; m_series->setName("ss"); m_chart->addSeries(m_series); m_chart->createDefaultAxes(); m_axisX=new QValueAxis; m_axisX->setRange(0,60); m_axisX->setGridLineVisible(true); m_axisX->setTickCount(11); //標記的個數 m_axisX->setMinorTickCount(5
); //次標記的個數 m_axisY=new QValueAxis; m_axisY->setRange(-5,10); m_axisY->setGridLineVisible(true); m_axisY->setTickCount(6); m_axisY->setMinorTickCount(2); m_chart->setAxisX(m_axisX,m_series); m_chart->setAxisY(m_axisY,m_series); m_chart->legend()->hide(); ui->graphicsView->setChart(m_chart); ui->graphicsView->setRenderHint(QPainter::Antialiasing); m_timer.setInterval(1000); m_timer.start(); connect(&m_timer,SIGNAL(timeout()),this,SLOT(handleTimeout())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_refreshData_clicked() { int i; for(i=0;i<1000;i++) { m_series->append(i,sin(i)); } }

  前半段程式碼源自網路,後半段程式碼簡單的定義。

文字讀取

  從txt文字中以單個位元組為間隔的方式讀取整個序列資料。

    QFile fil(QDir::currentPath()+".txt");
    fil.open(QIODevice::ReadOnly);
    char buf[1];
    qint64  addr;
    qint64  length;
    QString buf_exp(buf);
    QRegExp exp("[0-9a-fA-F]");
    addr=0;
    int i;
    bool toStop;
    toStop = false;
    i=0;
        while(!toStop)
        {
            fil.seek(addr);
            length = fil.read(buf,sizeof (buf));
            buf_exp = buf;
            if(!exp.indexIn(buf_exp))
            {
                qDebug()<<buf_exp<<":"<<sizeof(buf_exp);
                int x= atoi(buf);
                m_series->append(i,x);
                i++;
                addr=addr+length;
            }
            else
            {
                qDebug()<<"error";
                addr=addr+1;
            }
            if(addr>=fil.size())
            {
                fil.close();
                toStop = true;
            }
        }

  為了方便控制位寬,採用單位元組讀取,後面再逐漸修改正則匹配的形式。

效果

上面是基於函式生成的理想波形,下圖是基於位元組讀取的資料。

結論

  QT5可以快速地完成資料顯示的設計,用於資料的分析處理。

附件

  工程託管

歡迎在下方評論、轉發、分享。