如何在QTreeView的第二列中添加项目

时间:2019-06-28 18:30:42

标签: c++ qt

代码说明:

首先创建项目,然后定义第一列结构,最后尝试定义第二列结构。

对于第一个列结构,我对QStandardItems使用appendRow()方法。

对于第二个列结构,我对QStandardItemModel使用setItem()方法。

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // QStandardItemModel
    treeModel = new QStandardItemModel(this);

    // Create Items
    QStandardItem *item_0 = new QStandardItem("Item 0");
    QStandardItem *item_0_0 = new QStandardItem("Item 0_0");
    QStandardItem *item_1 = new QStandardItem("Item 1");
    QStandardItem *item_1_0 = new QStandardItem("Item 1_0");
    QStandardItem *item_1_0_0 = new QStandardItem("Item 1_0_0");

    QStandardItem *item_2 = new QStandardItem("Item 2");
    QStandardItem *item_3 = new QStandardItem("Item 3");

    // Root Item
    QStandardItem * rootItem = treeModel->invisibleRootItem();

    //Define the tree structure
    rootItem->appendRow(item_0);
    rootItem->appendRow(item_1);

    item_0->appendRow(item_0_0);

    item_1->appendRow(item_1_0);
    item_1_0->appendRow(item_1_0_0);

    //Define 2nd column structure
    treeModel->setItem(0,1,item_2);
    treeModel->setItem(1,1,item_3);

    // QTreeView
    ui->treeView->setModel(treeModel); 

}   

此代码导致下图。但是我想要的是让Item3紧挨Item2。

enter image description here

1 个答案:

答案 0 :(得分:1)

有许多方法可以实现所需的行为,但是以下可能是最简单的一种方法。我建议您仔细研究Qt文档。一个好主意是采用QTreeView而不是QTreeWidget,这不太灵活。

要完全掌握Qt中的MVC概念可能需要一些时间,但是值得付出努力。这是我的解决方法。

#include <QApplication>
#include <QStandardItemModel>
#include <QTreeView>

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto model=new QStandardItemModel;

    // Create Items
    QStandardItem *item_0 = new QStandardItem("Item 0");
    QStandardItem *item_0_0 = new QStandardItem("Item 0_0");
    QStandardItem *item_1 = new QStandardItem("Item 1");
    QStandardItem *item_1_0 = new QStandardItem("Item 1_0");
    QStandardItem *item_1_0_0 = new QStandardItem("Item 1_0_0");

    QStandardItem *item_2 = new QStandardItem("Item 2");
    QStandardItem *item_3 = new QStandardItem("Item 3");

    // Root Item
    QStandardItem * rootItem = model->invisibleRootItem();

    //Define the tree structure
    rootItem->appendRow(item_0);
    rootItem->appendRow(item_1);

    item_0->appendRow(QList<QStandardItem*>{item_0_0,item_2});
    item_1->appendRow(item_1_0);
    item_1_0->appendRow(item_1_0_0);
    model->setItem(1,1,item_3);

    auto view=new QTreeView;
    view->setModel(model);
    view->show();
    app.exec();
}