c++ - 使用 Qt 和 vector 发出文件行读取

标签 c++ qt vector qtableview

我在 Qt 中遇到问题,我正在运行代码以生成类对象的 vector 并将它们输出到 TableView。每当我运行代码时,它只读取文件的第一行。我放入相同的代码并将 TableView 部分更改为标准 cout,一切正常。

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

std::vector<reservation> currReservations;

//Initalize the vector set
//Runs the ReadFlightSchedule with the vector set and returns a 1 if there is a
//failure and 0 if all is good
if (ReadReservations(currReservations) == 1)
{
    //This sets a label to red showing the user an error reading the file
    ui->label->setText("<font color = 'red'>Error Reading File! Oops</font>");
}
else {
    //hides the error label since the file read good.
    ui->label->hide();

    //Generates the column header names
    QStandardItemModel *model = new QStandardItemModel(currReservations.size(), 5, this);
    model->setHorizontalHeaderItem(0, new QStandardItem(QString("Flier Name")));
    model->setHorizontalHeaderItem(1, new QStandardItem(QString("Flight Date")));
    model->setHorizontalHeaderItem(2, new QStandardItem(QString("Flight Number")));
    model->setHorizontalHeaderItem(3, new QStandardItem(QString("Seat Designation")));
    model->setHorizontalHeaderItem(4, new QStandardItem(QString("Reservation ID")));

    //Sets the values from the vector sets to the appropriate column and row sets.
    for (int i = 0; i < currReservations.size(); i++)
    {
        model->setItem(i, 0, new QStandardItem(QString::fromStdString(currReservations[i].getName())));
        model->setItem(i, 1, new QStandardItem(QString::fromStdString(currReservations[i].getDate())));
        model->setItem(i, 2, new QStandardItem(QString::fromStdString(currReservations[i].getFlightNum())));
        model->setItem(i, 3, new QStandardItem(QString::fromStdString(currReservations[i].getSeatDesg())));
        model->setItem(i, 4, new QStandardItem(QString::fromStdString(currReservations[i].getReservationID())));
    }

    ui->tableView->setModel(model);
    ui->tableView->resizeColumnsToContents();
   }
}

showReservations::~showReservations()
{
delete ui;
}

//User Generated Functions
int showReservations::ReadReservations(std::vector<reservation>& Res)
{
std::ifstream flightFile;
std::string fName, lName, date, seatDes, flightNum;
int error = 0;

flightFile.open("reservations.txt");

if(!flightFile)
{
    //returns a error value if there is a problem reading the file
    error = 1;
    return error;
}
else
{
    //Start reading files and sticks them into a class object and sticks the object into the vector set        
    while (flightFile >> fName >> lName >> date >> flightNum >> seatDes)
    {
        reservation newRes(fName, lName, date, flightNum, seatDes);
        Res.push_back(newRes);
    }
}

flightFile.close();
return error;

}

文件内容: 无名氏 04202013 602 1A 尼克交易 05012013 604 2B 约翰·史密斯 05012013 604 2A

工作非 Qt 代码:

int ReadReservations(std::vector<reservation>& Res);

int main(int argc, char **argv)
{
std::ifstream flightFile;
std::string name, date, seatDes, flightNum, line;

std::vector<reservation> Res;

flightFile.open("reservations.txt");
ReadReservations(Res);

for (int i = 0; i < Res.size(); i++)
{
    std::cout << Res[i].getName() << std::endl << Res[i].getDate() << std::endl << Res[i].getFlightNum() << std::endl << Res[i].getSeatDesg() << std::endl;
}
return 0;


}

int ReadReservations(std::vector<reservation>& Res)
{
 std::ifstream flightFile;
std::string fName, lName, date, seatDes, flightNum;
int error = 0;

flightFile.open("reservations.txt");

if(!flightFile)
{
    //returns a error value if there is a problem reading the file
    error = 1;
    return error;
}
else
{
    //Start reading files and sticks them into a class object and sticks the object into the vector set        
    while (flightFile >> fName >> lName >> date >> flightNum >> seatDes)
    {
        //flightFile >> fName >> lName >> date >> flightNum >> seatDes;
        reservation newRes(fName, lName, date, flightNum, seatDes);
        Res.push_back(newRes);
    }
}

flightFile.close();
return error;

}

我在不同的文件上有类似的工作。我只是无法弄清楚这个问题是什么。这是作业。

感谢大家的帮助

最佳答案

您可以像这样使用 appendRow:

for (int i = 0; i < currReservations.size(); i++)
{
    QList<QStandardItem*> row;
    row << new QStandardItem(QString::fromStdString(currReservations[i].getName())));
    row << new QStandardItem(QString::fromStdString(currReservations[i].getDate())));
    row << new QStandardItem(QString::fromStdString(currReservations[i].getFlightNum())));
    row << new QStandardItem(QString::fromStdString(currReservations[i].getSeatDesg())));
    row << new QStandardItem(QString::fromStdString(currReservations[i].getReservationID())));

    model->appendRow(row);
}

关于c++ - 使用 Qt 和 vector 发出文件行读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937223/

相关文章:

c++ - 了解 C++ 程序 [ Bjarne Stroustrup 的书 ]

c++ - 创建实例化所有其他类和子系统的类的目的是什么

python - 重定向 python 交互式帮助()

qt - 如何从外部委托(delegate)读取父 ListView 的自定义属性?

math - 某个角度的扰动向量

c++ - 使用 Eigen 动态类型进行统一初始化

c++ - 理解 'delete []' : C++

c++ - 反向模板别名

vector - 优先考虑向量的Y值

c++ - QtPlugin 无法加载库