QT开源例程阅读:Nested Layouts

2013年12月22日 由 Creater 留言 »

Widgets Tutorial – Nested Layouts

描述

该例子演示M/V模型与QTableView的使用,以及界面布局构建。
Model为QStandardItemModel
View为QTableView

Model的修改与数据添加

1.通过如下代码来修改横向header,修改header后,QTableView会自动决定列的数目,其中使用了QStringList()来存放标题行和数据每一行的列表。

model.setHorizontalHeaderLabels(
        QStringList() << QApplication::translate("nestedlayouts", "Name")
                      << QApplication::translate("nestedlayouts", "Office"));

2.QList来存放整张表,每一行的数据以String列表形式放于QStringList()中。QStringList重载了<<符号来添加元素。

    QList<QStringList> rows = QList<QStringList>()
        << (QStringList() << "Verne Nilsen" << "123")
        << (QStringList() << "Carlos Tang" << "77")
        << (QStringList() << "Bronwyn Hawcroft" << "119")
        << (QStringList() << "Alessandro Hanssen" << "32")
        << (QStringList() << "Andrew John Bakken" << "54")
        << (QStringList() << "Vanessa Weatherley" << "85")
        << (QStringList() << "Rebecca Dickens" << "17")
        << (QStringList() << "David Bradley" << "42")
        << (QStringList() << "Knut Walters" << "25")
        << (QStringList() << "Andrea Jones" << "34");

下面来看MODEL与VIEW的联系

1. QTableView的每一格为一个item,每一行的数据存放在QStringList,所以需要将以行存放的String转换为items,并使用appendRow将items以行为单位添加到Model中。
读取每一行的QStringList,将其中的Strings转换为以行为单位的items。

    foreach (QStringList row, rows) {
        QList<QStandardItem *> items;
        foreach (QString text, row)
            items.append(new QStandardItem(text));
        model.appendRow(items);
    }

2.Model与View的关联

resultView->setModel(&model);

其他

第一行隐藏了左侧的列标题
第二行使得QTableView,仅仅显示可用的列单元。

    resultView->verticalHeader()->hide();
    resultView->horizontalHeader()->setStretchLastSection(true);
广告位

发表评论

你必须 登陆 方可发表评论.