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

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 Offline
                JonBJ Offline
                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