Unsolved QTreeView in QTreeWidgetItem
-
Hi, guys!
I have QTreeWidget with QTreeWidgetItems.
QTreeWidgetItem should contain QTreeView.It work, but i need to resize QTreeView automaticaly by content.
tree->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); // do not workvoid MainWindow::addTreeView() { QFileSystemModel *model = new QFileSystemModel(); model->setRootPath(QDir::currentPath()); QTreeView *tree = new QTreeView(); tree->setModel(model); tree->setRootIndex(model->index(QDir::currentPath())); // ?? tree->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); // not work tree->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget); ui->treeWidget->setItemWidget(item, 0, tree); // ?? ui->treeWidget->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); ui->treeWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); addTreeView(); addTreeView(); }
How it can be implemented?
-
@Craetor said in QTreeView in QTreeWidgetItem:
QTreeWidgetItem should contain QTreeView.
I don't understand this: do you mean an item in your tree should contain another tree?!
-
@jsulm, yes, on screenshot you can see tree QTreeWidget with QTreeWidgetItem which the contain QTreeView.
But QTreeView can't execute setSizeAdjustPolicy - AdjustToContents. -
This can't be solved with a single QTreeWidget and a clever model instead? I'm surprised you got this to work.
-
@qwasder85,
how it can be solved? -
I fixed this issue.
- QTreeView return correct sizeHint for AdjustToContents.
- I implemented QStyledItemDelegate for sending sizeHint to QTreeWidgetItem from the QTreeView and force call QTreeWidget updateGeometries.
- Child class of QTreeView call SetData(0, Qt::SizeHintRole, sizeHint()) for QTreeWidgetItem on expanded and collapsed
it work fine, may be it very strange way, but i don't known another)
QSize CSResizeDelegate::sizeHint(const QStyleOptionViewItem&, const QModelIndex& index) const { CSResizableTreeWidgetItem *item = static_cast<CSResizableTreeWidgetItem*>(index.internalPointer()); if(item->treeWidget()) ((CSResizableTreeWidget*)item->treeWidget())->updateGeometriesPublic(); // force call QTreeWidget::updateGeometries return item->getTree()->sizeHint(); // return QTreeView::sizeHint }
-
@Craetor
Just to say: I don't really know what you're trying to achieve here. You say you're nestingQTreeView
s withinQTreeWidget
, why do you not just use 2 separateQTreeWidget/View
s? But I may not be understanding... -
@JonB
This code is a small example to find solution.
In my real project i need to show tree with different items and nested trees.