如何为qTreeView的qTreeWidget实现此代码?
for (const auto & i : names) {
QTreeWidgetItem * item = new QTreeWidgetItem(ui->treeWidget);
item->setText(0, QString::fromStdString(i));
ui->treeWidget->addTopLevelItem(item);
const std::unordered_map<std::string, double> map = m_reader.getMapFromEntry(i);
for (const auto & j : map) {
QTreeWidgetItem * item2 = new QTreeWidgetItem();
item2->setText(0,QString::fromStdString(j.first));
item2->setText(1,QString::number(j.second));
item->addChild(item2);
}
}
我有一个模型和一个treeView,如下所示:
m_model = new QStandardItemModel(m_reader.getAllNames().size(),2,this);
ui->treeView->setModel(m_model);
我试过了,但是只显示了一列:
QStandardItem * parentItem = m_model->invisibleRootItem();
for (const auto & i : names) {
QStandardItem * item = new QStandardItem(QString::fromStdString(i));
parentItem->appendRow(item);
const std::unordered_map<std::string, double> map = m_reader.getMapFromEntry(i);
for (const auto & j : map) {
QList<QStandardItem *> rowItems;
rowItems << new QStandardItem(QString::fromStdString(j.first));
rowItems << new QStandardItem(QString::number(j.second));
item->appendRow(rowItems);
}
}
有了treeWidget,我就这样设置了columnCount,如下所示:
ui->treeWidget->setColumnCount(2);
但是treeView没有这样的方法。
因此,总结一下:如何实现具有多个列的TreeView?
编辑:
为了澄清,我想要这样的事情:
| -A
| | -B-C
| | -D-E
其中A是父级,B,C,D,E是子级,其中B,D在第0列中,C,E在第1列中。
希望这可以帮助!
最佳答案
要支持多列,模型必须包含多列的数据。
因此,从某种意义上说,列是模型的属性,而不是 View 的属性。然后, View 可以决定隐藏或重新排列某些列(例如,QListView始终仅显示第一列,而一个人可以隐藏或重新排列QTableView中的列)。
当您使用QStandardItemModel时,其documentation应该给出一些提示,说明如何创建多个列。
例如,从文档中查看以下示例:
QStandardItemModel model(4, 4);
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 4; ++column) {
QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
model.setItem(row, column, item);
}
}
它创建一个具有4个初始行和列的模型,然后通过setItem()将其填充项目。
或者,您可以将项目列表传递给QStandardItemModel::appendRow(),每列一个项目:
QList<QStandardItem*> items;
items.append(new QStandardItem(tr("One"));
items.append(new QStandardItem(tr("Two"));
model->appendRow(items);
这将添加一个新行,第一列为“One”,第二列为“Two”。有关处理多列的更多方法,请参见QStandardItemModel文档。
注意:QTreeView期望在层次结构的所有级别上使用相同数量的列,因此如果需要,应为未使用的列填充空项目。