Vee*_*eti 12 c++ model-view-controller qt model models
我正在Qt中编写一个应用程序(使用C++),我需要在树视图中表示一个对象结构.其中一种方法是为此创建一个模型,但在阅读有关该主题的Qt文档后,我仍然感到很困惑.
我所拥有的"结构"非常简单 - 有一个Project对象将Task对象保存在std::vector容器中.这些任务也可以保存子任务.
我已经编写了使用Qt的XML类从XML文件读取和写入这些项目的方法.
是否有更多文档或"推荐阅读"从头开始创建模型?你怎么建议我开始实现这个?
ser*_*nko 12
作为Virgil在对问题的评论中所说的替代方法,您可以将QStandardItemModel类用于您的模型,并使用此类构建您的树.以下是一个例子:
QStandardItemModel* model = new QStandardItemModel();
QStandardItem* item0 = new QStandardItem(QIcon("test.png"), "1 first item");
QStandardItem* item1 = new QStandardItem(QIcon("test.png"), "2 second item");
QStandardItem* item3 = new QStandardItem(QIcon("test.png"), "3 third item");
QStandardItem* item4 = new QStandardItem("4 forth item");
model->appendRow(item0);
item0->appendRow(item3);
item0->appendRow(item4);
model->appendRow(item1);
ui->treeView->setModel(model);
Run Code Online (Sandbox Code Playgroud)
当UI(视图)被销毁时,删除model.文档:
实现这一目标的基本技巧实际上是使模型正确映射到数据结构。有些事情可能看起来很难,但不一定如此。
首先,使用QAbstractItemModel::createIndex构建模型索引,您可以通过可以添加到索引的指针或 uint32 来引用您自己的数据结构,具体取决于您选择使用的 createIndex 实例。
其次,头脑中结构清晰(正如您所看到的那样),编写parent和index函数就很容易了。这里的关键是要理解模型根是一个未初始化的QModelIndex实例。ieQModelIndex::isValid() == false表示根。
第三,如果您使用多列,请记住只有第一列有子项。
第四,要检查您是否按预期方式执行操作,请使用ModelTest类。它监视并检查您的模型,以便您遵循 Qt 模型视图类期望的约定。
| 归档时间: |
|
| 查看次数: |
22649 次 |
| 最近记录: |