C++ 如何使用QColumnView显示多列数据

C++ 如何使用QColumnView显示多列数据,c++,qt,qt4,qt-creator,C++,Qt,Qt4,Qt Creator,我想在QColumnView中显示多列数据。我使用QtCreator和Qt4进行开发 考虑一个地址簿应用程序,其中您有多个组:组1、组2等。您的联系人可以属于其中任何一个组 Group 1: John Smith Pocahontas Group 2: Chief Powhatan Group 3: ... 选择第一列中的某个组时,第二列将显示该组中的所有联系人;选择某个联系人时,其个人信息将显示在第三列中 我尝试了以下方法(基于Qt文档中的一个示例): QSt

我想在QColumnView中显示多列数据。我使用QtCreator和Qt4进行开发

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

Group 1:
    John Smith
    Pocahontas
Group 2:
    Chief Powhatan
Group 3:
    ...
选择第一列中的某个组时,第二列将显示该组中的所有联系人;选择某个联系人时,其个人信息将显示在第三列中

我尝试了以下方法(基于Qt文档中的一个示例):

QStringList strList1;
strList1集模型(strList1);
但是,我还没有弄清楚如何添加更多列,以及如何将联系人姓名作为这些组的子组添加到第一列中


我该怎么做?如何动态添加列和行(而不是像上面那样使用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();
}
#包括
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
qmainwin;
QColumnView*cview=新的QColumnView;
win.setCentralWidget(cview);
/*创建数据模型*/
QS标准模型;
对于(int-groupnum=0;groupnum<3;++groupnum)
{
/*将电话组创建为QStandardItems*/
QStandardItem*group=新的QStandardItem(QString(“组%1”).arg(groupnum));
/*每组追加5人作为子女*/
for(int personnum=0;personnum<5;++personnum)
{
QStandardItem*child=新的QStandardItem(QString(“人员%1(组%2)”).arg(personnum).arg(groupnum));
/*appendRow函数将子行作为新行追加*/
组->追加行(子级);
}
/*将组作为新行追加到模型中。模型获取项目的所有权*/
模型。附录行(组);
}
cview->setModel(&model);
win.show();
返回app.exec();
}
有关Qt模型/视图编程的更多详细信息,请参阅

#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();
}