Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QTreeView in QTreeWidgetItem
Forum Update on Monday, May 27th 2025

QTreeView in QTreeWidgetItem

Scheduled Pinned Locked Moved Unsolved General and Desktop
qtreeviewqtreewidgetitemadjusttocontentqtreewidget
8 Posts 4 Posters 2.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    Craetor
    wrote on last edited by Craetor
    #1

    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 work

    void 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?

    image

    jsulmJ 1 Reply Last reply
    0
    • C Craetor

      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 work

      void 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?

      image

      jsulmJ Online
      jsulmJ Online
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @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?!

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • C Offline
        C Offline
        Craetor
        wrote on last edited by
        #3

        @jsulm, yes, on screenshot you can see tree QTreeWidget with QTreeWidgetItem which the contain QTreeView.
        But QTreeView can't execute setSizeAdjustPolicy - AdjustToContents.

        1 Reply Last reply
        0
        • qwasder85Q Offline
          qwasder85Q Offline
          qwasder85
          wrote on last edited by
          #4

          This can't be solved with a single QTreeWidget and a clever model instead? I'm surprised you got this to work.

          1 Reply Last reply
          0
          • C Offline
            C Offline
            Craetor
            wrote on last edited by
            #5

            @qwasder85,
            how it can be solved?

            1 Reply Last reply
            0
            • C Offline
              C Offline
              Craetor
              wrote on last edited by Craetor
              #6

              I fixed this issue.

              1. QTreeView return correct sizeHint for AdjustToContents.
              2. I implemented QStyledItemDelegate for sending sizeHint to QTreeWidgetItem from the QTreeView and force call QTreeWidget updateGeometries.
              3. 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
              }
              

              alt text

              JonBJ 1 Reply Last reply
              0
              • C Craetor

                I fixed this issue.

                1. QTreeView return correct sizeHint for AdjustToContents.
                2. I implemented QStyledItemDelegate for sending sizeHint to QTreeWidgetItem from the QTreeView and force call QTreeWidget updateGeometries.
                3. 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
                }
                

                alt text

                JonBJ Online
                JonBJ Online
                JonB
                wrote on last edited by JonB
                #7

                @Craetor
                Just to say: I don't really know what you're trying to achieve here. You say you're nesting QTreeViews within QTreeWidget, why do you not just use 2 separate QTreeWidget/Views? But I may not be understanding...

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  Craetor
                  wrote on last edited by Craetor
                  #8

                  @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.

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved