QList用起来,暂时还不顺手,高手指点。
按理解是该用在堆中创建变量,不用的时候自己释放。但我在栈中操作,也没有报错,但总是感觉用错了。
C++真心不是太好用,QT虽然好一点,但比起C#,java还是差好些。倒着转型,有点费力。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QChartView>
#include <QtCharts>
#include "ChartView.h"
#include <cnc_data.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
virtual void resizeEvent(QResizeEvent *event) override;
virtual void wheelEvent(QWheelEvent *event) override;
private slots:
void on_actionOpen_triggered();
void on_PB_Offset_clicked();
void on_PB_Zoom_clicked();
void on_PB_Reset_clicked();
private:
Ui::MainWindow *ui;
QGridLayout *baseLayout;
QList<CNC_Data> CNC;
};
#endif // MAINWINDOW_H
菜单的点击事件中,加载数据:
QFileDialog dialog;
QString fileName = dialog.getOpenFileName(0, "Open File", "C:\\", "Exce(*.csv)");
if(fileName==""){
return ;
}
CNC.clear();
QDir dir = QDir::current();
QFile file(dir.filePath(fileName));
if(file.open(QIODevice::ReadOnly)){
qDebug()<<file<<"StartRead File\n";
QTextStream stream(&file);
for(int i=0;i<4;i++)
{
stream.readLine();
}
int i=0;
forever{
i++;
QString line = stream.readLine();
if(line.isEmpty())
{
break;
}
QStringList tempbar = line.split(",");//一行中的单元格以,区分
//这里用的是栈,不是堆,按说事件结束后,变量生命周期结束,但是CNC list中数据还是在的。但是总觉的这样用是错的。
该用指针声明变量,不用的时候释放掉。
CNC_Data CNCItem= CNC_Data (tempbar[1].toDouble(),tempbar[2].toDouble(),tempbar[3].toDouble(),tempbar[4].toDouble());
CNC.append(CNCItem);
}
file.close();
}
#include "cnc_data.h"
CNC_Data::CNC_Data(float mPosX,float mPOSF,float mSPEED, float mTCMD)
{
PosX=mPosX;
POSF=mPOSF;
SPEED=mSPEED;
TCMD=mTCMD;
}