简体   繁体   English

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

[英]How to add items in 2nd column of QTreeView

Code explain:代码说明:

First I create the items, next I define the 1st column structure and finally I try to define the 2nd column structure.首先我创建项目,接下来我定义第一列结构,最后我尝试定义第二列结构。

For the first column structure I use appendRow() method to QStandardItems.对于第一列结构,我对 QStandardItems 使用 appendRow() 方法。

For the second column structure I use setItem() method to the QStandardItemModel.对于第二列结构,我对 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); 

}   

This code result in the image below.此代码导致下图。 But what I want is to have Item3 just below Item2.但我想要的是将 Item3 放在 Item2 的正下方。

在此处输入图片说明

There are many ways to achieve your desired behavior, but the following is maybe the one being most straightforward.有很多方法可以实现您想要的行为,但以下可能是最直接的一种。 I suggest, that you study carefully the Qt docs.我建议您仔细研究 Qt 文档。 A good idea is to take the QTreeView instead of the QTreeWidget , which is kind of less flexible.一个好主意是使用QTreeView而不是QTreeWidget ,这有点不太灵活。

It might take some time to fully grasp the MVC concept in Qt, but it is worth the effort.完全掌握 Qt 中的 MVC 概念可能需要一些时间,但值得付出努力。 Here goes my solution.这是我的解决方案。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM