QT 读取文件写入Qtablewidget中

我写了一个类,classHeatUser{private:charName[30];floatFlow;floatDistance;shortTime;};txt文件中每... 我写了一个类,
class HeatUser
{
private:
char Name[30];
float Flow;
float Distance;
short Time;
};
txt文件中每一行是一个类的对象,有几十行。怎样从txt文件读取数据并且初始化类的对象。
同时这些对象写入Qtablewidget表格中。界面上有个按钮,点击按钮刷新表格中处理后类对象的数据。
展开
 我来答
万永泰
2018-05-11 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:107
采纳率:100%
帮助的人:44.2万
展开全部

1、HeatUser类

class HeatUser
{
public:
    HeatUser(){

    }

    HeatUser(QString name, float flow, float distance, short time){
        strcpy(Name, name.toLocal8Bit().data());
        Flow = flow;
        Distance = distance;
        Time = time;
    }
    ~HeatUser(){

    }

    QString getName(){
        return Name;
    }

    QString getFlow(){
        return QString("%1").arg(Flow);
    }

    QString getDistance(){
        return QString("%1").arg(Distance);
    }

    QString getTime(){
        return QString("%1").arg(Time);
    }


private:
    char Name[30];
    float Flow;
    float Distance;
    short Time;
};

2、对象初始化

    QFile file("aa.txt");
    if(file.open(QIODevice::ReadOnly))
    {
        QTextStream stream(&file);
        while(!stream.atEnd())
        {
            QStringList list = stream.readLine().split(QRegExp("\\s+"));
            HeatUser hUser(list.at(0), static_cast<QString>(list.at(1)).toFloat(),
                           static_cast<QString>(list.at(2)).toFloat(),
                           static_cast<QString>(list.at(3)).toShort());

            vec.push_back(hUser);

        }
    }

3、文件内容

aa  126.0   22.6    99
bb   165.0   23.6    100

4、写入Qtablewidget

    ui->tableWidget->setRowCount(2);     //设置行数为2
    ui->tableWidget->setColumnCount(4);   //设置列数为4

    QStringList header;
    header << "Name" << "Flow" << "Distance" << "Time";
    ui->tableWidget->setHorizontalHeaderLabels(header);


    for(int i = 0; i < vec.count(); i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(vec[i].getName()));
        ui->tableWidget->setItem(i,1,new QTableWidgetItem(vec[i].getFlow()));
        ui->tableWidget->setItem(i,2,new QTableWidgetItem(vec[i].getDistance()));
        ui->tableWidget->setItem(i,3,new QTableWidgetItem(vec[i].getTime()));
    }
追问
请问tableWidget是在main函数里还是widget.cpp里,如果在widget.cpp里怎么访问vec[i]
追答

tableWidget 在 widget.cpp 里的界面上,vec[i] 也是  widget 里的成员

class Paint : public QMainWindow
{
    Q_OBJECT

public:
    explicit Paint(QWidget *parent = 0);
    ~Paint();

private:
    Ui::Paint *ui;

    QScrollArea *scrollarea;

    PaintArea *area;

    QVector<HeatUser> vec;
};
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式