QTreeWidgetItem sizeHint returning QSize(-1,-1)
-
I've tried the sizeHint() for various columns on various QTreeWidgetItems all with the same results. sourceFilesLeft is just a top-level QTreeWidgetItem for one of the QTreeWidgets. I've also tried sizeHint() on my QTreeWidgetItem subclass TreeFileDirItem with the same results.
-
I created a sample project and got the same results with stripped down code. Here it is if you could take a look:
https://www.dropbox.com/s/9v4irn1bvuptxmy/treetest2.zip?dl=0
Click the bullets in the upper right then download...
Thanks -
Ok, after having re-check the documentation and the code. That method returns the value you set for it thus since you never gave a size hint to start with you'll get the default value you are currently getting.
-
Here it says:
Sets the size hint for the tree item in the given column to be size. If no size hint is set, the item delegate will compute the size hint based on the item data.
http://doc.qt.io/qt-5/qtreewidgetitem.html#setSizeHint
Doesn't that sound like it should return an ideal sizehint based on the size of the column data or text?
-
The delegate will do the math, but it won't change the content of the model.
-
What is exactly your purpose ?
-
So you would like the column to resize so your tooltip fits in ?
-
So, in fact, you would like to show the full content of a cell in a QToolTip ?
-
so what you want is probably to use
setData
on the widget item to set the Qt::ToolTipRole at the same value as main cell content. this will solve the " you would like to show the full content of a cell in a QToolTip" partfor the "only for cells that dont fit the entire text in the column" part you have to subclass QTreeWidget, reimplement
viewportEvent(QEvent *event)
so that if the event type is Qt::ToolTip you check if it fits usingsizeHintForIndex
if it does reject the event otherwise just call the base class implementation -
Correct me if I'm wrong but if I understand the situation correctly, you would like to resize the column to show a tooltip for something that doesn't fit in the cell within that cell. So in the end, the cell would be large enough to show the complete data, no ?
-
I tried indexAt(QCursor::pos())... The code I used is on the bottom. For the qDebug() I get this:
QVariant(Invalid) -1 100
So it looks like the same freakin problem with sizehint... I also tried this->currentIndex() instead of indexAt with the same results. Time to throw the computer out of the window!
bool TreeFileDir::viewportEvent(QEvent *event) { if (event->type() == QEvent::ToolTip) { qDebug() << indexAt(QCursor::pos()).data(Qt::DisplayRole) << sizeHintForIndex(indexAt(QCursor::pos())).width() << columnWidth(0); if (sizeHintForIndex(indexAt(QCursor::pos())).width() <= columnWidth(0)) return true; else return false; } QTreeWidget::viewportEvent(event); }