代码说明:
首先创建项目,然后定义第一列结构,最后尝试定义第二列结构。
对于第一个列结构,我对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。
答案 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();
}