如何创建从 C++ 对象数组填充的 qtablewidget?
How to create a qtablewidget populated from a C++ object array?
我看了很多教程和例子,我似乎找不到一个像样的例子 qtablewidget 利用 objects 的数据。几乎所有的详细教程(硬编码数据除外)都涉及数据库和qtableview。
一些背景知识: 我编写了一个控制台程序,可以在 class 中计算和显示学生的成绩和作业。教师输入部分权重、作业名称、出勤日期、作业最高分数等数据。然后她输入这些不同作业的分数或每个学生的出勤率。教师数据保存在教师对象中(例如 Teacher teacher;
),学生数据保存在构成 class 花名册的学生对象数组中。 (例如 Student class_roster[50];
)显然,各种函数在各自的 classes 中处理计算。它完美地工作......在控制台中。
现在,作为一种活动扳手,我必须将它变成一个 GUI 程序而不是控制台。作为 C++,Qt 似乎是一种类似于 Visual C# 的有趣方法。在尝试完成这项工作 3 天之后,随着我的截止日期的临近,我屈服于这样一个事实,即我不知道在 Qt 方面我在做什么。将不胜感激。
我贴了一张我在Qt Creator中设计的GUI的图片。由此,有人可以为我提供一个可靠的例子来说明我正在努力完成什么吗?我犹豫要不要一个好的教程(因为相关政策)
所以,简而言之,我需要知道的是:
1) 如何将文本字段中的数据加载到我的 classes/objects.
2) 如何使用来自 classes/objects.
的数据填充 qtablewidgets
注意:这是为了测试 class (V&V),所以 Qt 不是项目。我完成的代码很重要,所以我在这里要求的任何内容都不会违反任何道德规范。我们只需要一个用于线束的 GUI。
在此处检查 QTableWidget 的信号 http://doc.qt.io/qt-4.8/qtablewidget.html#details
例如,当您的 table 的单元格发生更改时,会发出此信号:
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
}
这涵盖了第一个问题。
为了填充您的 table,当您创建它时,您只需创建单元格,用您的数据填充它们并插入它们,即:
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
}
}
该代码是一个近似值,但它可能会帮助您理解这个想法。
我看了很多教程和例子,我似乎找不到一个像样的例子 qtablewidget 利用 objects 的数据。几乎所有的详细教程(硬编码数据除外)都涉及数据库和qtableview。
一些背景知识: 我编写了一个控制台程序,可以在 class 中计算和显示学生的成绩和作业。教师输入部分权重、作业名称、出勤日期、作业最高分数等数据。然后她输入这些不同作业的分数或每个学生的出勤率。教师数据保存在教师对象中(例如 Teacher teacher;
),学生数据保存在构成 class 花名册的学生对象数组中。 (例如 Student class_roster[50];
)显然,各种函数在各自的 classes 中处理计算。它完美地工作......在控制台中。
现在,作为一种活动扳手,我必须将它变成一个 GUI 程序而不是控制台。作为 C++,Qt 似乎是一种类似于 Visual C# 的有趣方法。在尝试完成这项工作 3 天之后,随着我的截止日期的临近,我屈服于这样一个事实,即我不知道在 Qt 方面我在做什么。将不胜感激。
我贴了一张我在Qt Creator中设计的GUI的图片。由此,有人可以为我提供一个可靠的例子来说明我正在努力完成什么吗?我犹豫要不要一个好的教程(因为相关政策)
所以,简而言之,我需要知道的是:
1) 如何将文本字段中的数据加载到我的 classes/objects.
2) 如何使用来自 classes/objects.
的数据填充 qtablewidgets注意:这是为了测试 class (V&V),所以 Qt 不是项目。我完成的代码很重要,所以我在这里要求的任何内容都不会违反任何道德规范。我们只需要一个用于线束的 GUI。
在此处检查 QTableWidget 的信号 http://doc.qt.io/qt-4.8/qtablewidget.html#details 例如,当您的 table 的单元格发生更改时,会发出此信号: 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
}
这涵盖了第一个问题。
为了填充您的 table,当您创建它时,您只需创建单元格,用您的数据填充它们并插入它们,即:
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
}
}
该代码是一个近似值,但它可能会帮助您理解这个想法。