Как использовать QColumnView для отображения нескольких столбцов данных - PullRequest
3 голосов
/ 31 августа 2010

Я хочу отображать данные в нескольких столбцах в QColumnView.Я использую Qt Creator и Qt 4. для разработки.

Рассмотрим приложение адресной книги, в котором у вас есть несколько групп: Группа 1, Группа 2 и т. Д. Ваши контакты могут принадлежать к любой из этих групп.

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

Когда выбрана группа в первом столбце, во втором столбце отображаются все контакты в этой группе, а при выборе контакта их личная информация отображается в третьем столбце.

Iпробовал следующее (на основе примера из документации 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 Ответ

8 голосов
/ 31 августа 2010

Вы можете положиться на 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();
}

Для получения более подробной информации о программировании модели / представления Qt, пожалуйста, обратитесь к официальной документации .

...