@@ -193,27 +193,36 @@ QSize QgsDetailedItemDelegate::sizeHint(
193193{
194194 if (qVariantCanConvert<QgsDetailedItemData>(theIndex.data (Qt::UserRole)))
195195 {
196- return QSize (378 ,mpWidget->height ());
196+ QgsDetailedItemData myData =
197+ qVariantValue<QgsDetailedItemData>(theIndex.data (Qt::UserRole));
198+ if (myData.isRenderedAsWidget ())
199+ {
200+ return QSize (378 ,mpWidget->height ());
201+ }
202+ else // fall back to hand calculated & hand drawn item
203+ {
204+ QFont myFont = theOption.font ;
205+ QFont myTitleFont = myFont;
206+ myTitleFont.setBold (true );
207+ myTitleFont.setPointSize (myFont.pointSize () + 3 );
208+ QFontMetrics myTitleMetrics (myTitleFont);
209+ QFontMetrics myDetailMetrics (myFont);
210+ int myVerticalSpacer = 3 ; // spacing between title and description
211+ int myHorizontalSpacer = 5 ; // spacing between checkbox / icon and description
212+ int myHeight = myTitleMetrics.height () + myVerticalSpacer;
213+ QString myDetailString = theIndex.model ()->data (theIndex, Qt::UserRole).toString ();
214+ QStringList myList = wordWrap ( myDetailString,
215+ myDetailMetrics,
216+ theOption.rect .width () - (mpCheckBox->width () + myHorizontalSpacer));
217+ myHeight += (myList.count () + 1 ) * (myDetailMetrics.height () - myVerticalSpacer);
218+ // for some reason itmes are non selectable if using rect.width() on osx and win
219+ return QSize (50 , myHeight + myVerticalSpacer);
220+ // return QSize(theOption.rect.width(), myHeight + myVerticalSpacer);
221+ }
197222 }
198- else // fall back to hand calculated & hand drawn item
223+ else // cant convert to qgsdetaileditemdata
199224 {
200- QFont myFont = theOption.font ;
201- QFont myTitleFont = myFont;
202- myTitleFont.setBold (true );
203- myTitleFont.setPointSize (myFont.pointSize () + 3 );
204- QFontMetrics myTitleMetrics (myTitleFont);
205- QFontMetrics myDetailMetrics (myFont);
206- int myVerticalSpacer = 3 ; // spacing between title and description
207- int myHorizontalSpacer = 5 ; // spacing between checkbox / icon and description
208- int myHeight = myTitleMetrics.height () + myVerticalSpacer;
209- QString myDetailString = theIndex.model ()->data (theIndex, Qt::UserRole).toString ();
210- QStringList myList = wordWrap ( myDetailString,
211- myDetailMetrics,
212- theOption.rect .width () - (mpCheckBox->width () + myHorizontalSpacer));
213- myHeight += (myList.count () + 1 ) * (myDetailMetrics.height () - myVerticalSpacer);
214- // for some reason itmes are non selectable if using rect.width() on osx and win
215- return QSize (50 , myHeight + myVerticalSpacer);
216- // return QSize(theOption.rect.width(), myHeight + myVerticalSpacer);
225+ return QSize (50 ,50 ); // fallback
217226 }
218227}
219228
0 commit comments