如何使用QColumnView显示多列数据

时间:2010-08-31 16:40:30

标签: c++ qt qt4 qt-creator

我想在QColumnView中的多个列中显示数据。我正在使用Qt Creator和Qt 4进行开发。

考虑一个地址簿应用程序,其中您有多个组:第1组,第2组等。您的联系人可以属于任何这些组。

Group 1:
    John Smith
    Pocahontas
Group 2:
    Chief Powhatan
Group 3:
    ...

当选择第一列中的组时,第二列将显示该组中的所有联系人,当选择联系人时,其个人信息将显示在第三列中。

我尝试了以下内容(基于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);

但是,我无法弄清楚如何添加更多列,并在第一列中添加联系人姓名作为这些组的子项。

我该怎么做?我怎样才能动态添加列和行(而不是像上面那样使用QStringList,或者对行使用任何其他类似的方法)?

1 个答案:

答案 0 :(得分:8)

您可以依赖QStandardItemQStandardItemModel。这是一个关于如何将这些类与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();
}

有关Qt模型/视图编程的详细信息,请参阅the official documentation