QT QList自定义类的使用(自定义类该放在堆中还是栈中)

本文探讨了在C++与QT环境下QList的使用方法,特别关注其在堆与栈上的变量管理差异。通过一个具体案例,即从CSV文件加载数据到QList中,展示了如何正确地在不同存储区创建和管理变量,避免潜在的内存泄漏问题。
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;
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值