Gen*_*nba 3 c++ qt qt4 qt-creator
我想在QColumnView中的多列中显示数据.我正在使用Qt Creator和Qt 4进行开发.
考虑一个地址簿应用程序,其中您有多个组:组1,组2等.您的联系人可以属于任何这些组.
Group 1:
John Smith
Pocahontas
Group 2:
Chief Powhatan
Group 3:
...
Run Code Online (Sandbox Code Playgroud)
当选择第一列中的组时,第二列将显示该组中的所有联系人,并且当选择联系人时,其个人信息将显示在第三列中.
我尝试了以下内容(基于Qt文档中的示例):
QStringList strList1;
strList1 << "Group 1" << "Group 2" << "Group 3";
strListM1 = new QStringListModel(); // Previously declared as QStringListModel *strListM1
strListM1->setStringList(strList1);
ui->columnView->setModel(strListM1);
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何添加更多列,并在第一列中添加联系人姓名作为这些组的子项.
我怎样才能做到这一点?我怎样才能动态添加列和行(而不是像上面那样使用QStringList,或者行的任何其他类似方法)?
你可以依靠QStandardItem
和QStandardItemModel
.这是一个关于如何使用这些类的简单且可编译的示例QColumnView
:
#include <QtGui>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QMainWindow win;
QColumnView *cview = new QColumnView;
win.setCentralWidget(cview);
/* Create the data model */
QStandardItemModel model;
for (int groupnum = 0; groupnum < 3 ; ++groupnum)
{
/* Create the phone groups as QStandardItems */
QStandardItem *group = new QStandardItem(QString("Group %1").arg(groupnum));
/* Append to each group 5 person as children */
for (int personnum = 0; personnum < 5 ; ++personnum)
{
QStandardItem *child = new QStandardItem(QString("Person %1 (group %2)").arg(personnum).arg(groupnum));
/* the appendRow function appends the child as new row */
group->appendRow(child);
}
/* append group as new row to the model. model takes the ownership of the item */
model.appendRow(group);
}
cview->setModel(&model);
win.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
有关Qt模型/视图编程的更多详细信息,请参阅官方文档.