我在QListWidget中有一个QListWidgetItem的列表(Hor滚动条就在那里,因为数量很大的项目)。每个QListWidgetItem包含一个QPixmap作为数据(按比例缩小到某个随机值)。我的要求是点击QPixmap时应突出显示(刷宽10的圆角矩形)。我将每个QListWidgetItem委托给QItemDelegate。我在这里有几个问题。
如何在选择相应的QListWidgetItem时绘制QPixmap的圆角矩形?
上面提到的绘制事件应该在单击QPixmap时发生(不在QListWidgetItem的其他部分)。由于QPixmaps的大小不同,QListWidgetItem中QPixmaps的顶部和底部将为空,单击那里也会触发ItemDelegate。如何摆脱这种选择?
答案 0 :(得分:0)
我不知道QListWidget是否可行,因为我从来没有这样做过。但是,我使用QListView和自定义模型以及委托来完成。它的要点是这样的:
在我的自定义 QAbstractListModel :
中QVariant data(const QModelIndex &index, int role) const
{
if(index.isValid())
{
switch(role)
{
case MyCustomRole:
return QVariant(*pointerToMyQPixmap);
break;
...
在我的自定义 QStyledItemDelegate :
中void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
...
// Best make DAMN sure it's not null else we will crash and burn.
QPixmap pix = index.data(myCustomRole).value<QPixmap>();
painter->drawPixmap(1, 1, pix);
...
在我看来,Qt的模型/视图框架有点蹩脚,但在他们理解之前,除了他们在框架中提供的内置小部件的基本功能之外,你还需要学习它们。 。换句话说,如果你想要更多QListWidget的功能,你需要研究QListView并实现你自己的模型和视图