Solved QListWidget::setItemWidget The Selection area behind the label image
-
- i use the
QListWidget
to preview some images files. I did not use the setIcon. I did inherit QWidget, QWidget include two QLabel to load imags and to show some text. - i use the following code to add the item;
pItemWidget = new ListItemWidget(this); // My Widget pItemWidget->SetPixmap( pixmap ); // My customize function: Qlabel load pixmap pItemWidget->SetImgPath( qsFilePath );// My customize function: show some text pItem = new QListWidgetItem(this); pItem->setSizeHint( pItemWidget->size() ); pItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled); setItemWidget(pItem, pItemWidget);
-
when i use the mouse to choose the list widget item, i find the selection area behind the label image. i do not know how to do ? help me...
-
My Problem image
-
My Code. My Zip code, You can click and download My code Demo
- i use the
-
@joeQ Try
setSelectionRectVisible(false)
-
@p3c0 i want to have the selection area. but the selection area behind the label image. i want the selection area before the label image. Thank u.
-
@joeQ The selection rect is already at foreground. There might be some other problem in your code.
Here a simple test I did:for(int i=0; i<10; i++) { QListWidgetItem *item = new QListWidgetItem; item->setText("Item"); item->setIcon(QIcon("image.png")); ui->listWidget->insertItem(row, item); }
-
@p3c0 Yes, i used the other way is ok. but, i used the
setItemWidget
to QListWidget, it is wrong. i don't know why. you can download my demo. step 4. Please help me. Thank u. -
@joeQ Unfortunately I too am not aware of this kind of behaviour. I have reduced the problem to the following for anyone else to test:
listWidget->setViewMode(QListView::IconMode); listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); for(int i=0; i<10; i++) { QPushButton *label = new QPushButton; label->resize(50,50); label->setText("Button"+QString::number(i)); QListWidgetItem *item = new QListWidgetItem; item->setSizeHint(label->size()); listWidget->insertItem(i, item); listWidget->setItemWidget(item, label); }
For eg. following works:
Use
QLabel
instead and set only thetext
. But if we set pixmap for label then its the same behavior.
Is there any other setting ? Or only subclassing might solve this problem ? -
@p3c0 Thank u very much, I do not give it up. when i solved it , i will share my way for u.
-
Hi,
It's because you are setting a widget on a cell, the widget is "above" the cell.
If you only want to show an image then you should use a custom QStyledItemDelegate.
-
@SGaist Hi, Thank u. and if I don't want to use a custom QStyledItemDelegate. What should I do ?
My Widget has image label and text label, The important thing is that some of my structure data is stored in the Widget class members, eg: structure pointer.
I also used try
setItemData
function, but Data type mismatch. so, i subclass the QWidget. -
From the setItemWidget documentation: it's to display static content. It's not meant to handle D&D or editing.
Why do you need to embed custom data in that widget ?
-
@SGaist I think i was wrong, i chosed the wrong solution. Thank u, and , i found some demo about delegate, i know , i should to use the
QStyledItemDelegate
class. Thank u very much. and i am new bird in Qt. so ...