如何创建一个从C ++对象数组填充的qtablewidget?

时间:2015-06-23 15:27:51

标签: c++ qt user-interface qtablewidget

我已经查看了许多教程和示例,而且我似乎找不到利用对象来获取数据的 qtablewidget 的正确示例。几乎所有详细的教程(硬编码数据除外)都涉及数据库和qtableview。

一些背景知识:我编写了一个控制台程序,用于计算和显示班级中学生的成绩和作业。教师输入部分权重,作业名称,出勤日期,分配最大分数等数据。然后,她为每个学生输入这些不同作业或出勤的分数。教师数据保存在Teacher对象(例如Teacher teacher;)中,学生数据保存在构成班级名单的Student对象数组中。 (例如Student class_roster[50];)显然,各种函数处理各自类中的calucations。它在控制台中完美运行。

现在,作为一种猴子扳手,我必须将其作为GUI程序而不是控制台。作为C ++,Qt似乎是一个类似于Visual C#的有趣方法。经过3天尝试完成这项工作后,在我的截止日期快速适应的情况下,我已经屈服于这样一个事实:我不知道自己在Qt时所做的事情。非常感谢帮助。

我已经发布了我在Qt Creator中设计的GUI图片。从那以后,有人能为我提供一个我想要完成的事情的坚实榜样吗?我犹豫要求一个好的教程(因为关于那个的政策)

因此,简而言之,我需要知道的是:

1)如何将文本字段中的数据加载到我的类/对象中。

2)如何使用类/对象中的数据填充qtablewidgets。

注意:这是针对测试类(V& V),因此Qt不是项目。我完成的代码是重要的,所以我在这里要求的任何东西都不违反任何道德规范。我们只需要一个用于线束的GUI。

GradeBook GUI Screenshot

1 个答案:

答案 0 :(得分:1)

在此检查QTableWidget的信号http://doc.qt.io/qt-4.8/qtablewidget.html#details 例如,当您的表格的单元格被更改时,此信号将被激活: void QTableWidget :: itemChanged(QTableWidgetItem * item); 将该信号连接到您将单元格数据发送到对象的插槽,即:

void pseudoSlot(QTableWidgetItem * item)
{ 
   if(item.column() == 1) //its last name
   {
       passLastNameDataToYourObjects(item.row, item->text()); //item->row() will be the index of the student
   }
   //continue with the rest of the cases
}

这涵盖了第一个问题。

为了填充你的表格,当你创建它时,你只需创建单元格,用数据填充它们并插入它们,即:

void pseudoFillTable(QTableWidget *table_)
{
    foreach(Student s, classRoster)
    {
        insertRow(table_.rowCount());
        QTableWidgetItem *lastNameItem = new QTableWidgetItem(s.getLastNameOrSomething());
        table_->setItem(table_.rowCount(), 1, lastNameItem); //the 1 is the index of the lastName column
        //and so on
    }
}

代码是近似值,但它可能会帮助您理解。