C++ QListView上的Qt5 QStyledItemDelegate将删除所有默认样式
我在C++ QListView上的Qt5 QStyledItemDelegate将删除所有默认样式,c++,qt5,qstyleditemdelegate,C++,Qt5,Qstyleditemdelegate,我在QListview中显示了一些QIcon和QString对。整个过程都是使用Qt模型/视图编程设置的 我正在该QListView中显示带标签的图标。使用IconMode、Snap和TopToBottom标志显示项目。因此,这些被组织成一个网格 我想将所有QListView项目垂直居中布局。为此,我对QStyledItemDelegate对象进行了子类化,并重载了paint方法。然而,我有三个主要问题: 图标标签已被移动(在QStyledItemDelegate子类中),并在其原始位置显示一个
QListview
中显示了一些QIcon
和QString
对。整个过程都是使用Qt模型/视图编程设置的
我正在该QListView
中显示带标签的图标。使用IconMode
、Snap
和TopToBottom
标志显示项目。因此,这些被组织成一个网格
我想将所有QListView
项目垂直居中布局。为此,我对QStyledItemDelegate
对象进行了子类化,并重载了paint方法。然而,我有三个主要问题:
QStyledItemDelegate
子类中),并在其原始位置显示一个虚线方块setGridSize
,所有内容都会渲染到网格中。我只想使用一个“列”- 我的自定义
的构造函数摘要:QListView
的绘制方法:QStyledItemDelegate
void FramesStyledItemDelegate::paint(qPaint*painter,常量qStyleOption视图项和选项,常量QModelIndex和索引)常量
{
QStyleOptionViewItemV4 opt=选项;
//initStyleOption(&opt,index);
opt.icon=QIcon();
opt.text=QString();
QApplication::style()->drawControl(QStyle::CE_ItemViewItem,&opt,painter);
const QRect r=option.rect;
QIcon=qvariant_cast(index.data(Qt::DecorationRole));
QString=qvariant_cast(index.data(Qt::DisplayRole));
QPixmap pix=icon.pixmap(r.size());
常数QPoint p=QPoint((r.width()-pix.width())/2,(r.height()-pix.height())/2);
painter->drawPixmap(r.topLeft()+p,pix);
画师->绘图文本(r.center()+p+QPoint(-(string.count()/2),r.height()/2),字符串);
}
- 如果我不使用上面显示的
,我可以删除 虚线正方形,但我丢失了所有默认样式initStyleOption
- 如果我取消注释
,则会出现虚线方块。我也会丢失所有默认样式initStyleOption
initStyleOption
已取消注释)
我已切换到列表模式
。选择装饰正在工作,但未悬停。同样,标签的原始位置会出现一个小的点正方形
有人有主意吗?谢谢你的回答
setViewMode(QListView::IconMode);
setMovement(QListView::Snap);
setFlow(QListView::TopToBottom);
setSpacing(5);
setIconSize(QSize(iconSize, iconSize));
setGridSize(QSize(iconSize + 10, iconSize + 10));
setDragEnabled(true);
setAcceptDrops(true);
setDropIndicatorShown(true);
void FramesStyledItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QStyleOptionViewItemV4 opt = option;
//initStyleOption(&opt, index);
opt.icon = QIcon();
opt.text = QString();
QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter);
const QRect r = option.rect;
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
QString string = qvariant_cast<QString>(index.data(Qt::DisplayRole));
QPixmap pix = icon.pixmap(r.size());
const QPoint p = QPoint((r.width() - pix.width())/2, (r.height() - pix.height())/2);
painter->drawPixmap(r.topLeft() + p, pix);
painter->drawText(r.center() + p + QPoint(-(string.count() / 2), r.height() / 2), string);
}