у меня есть немного QIcon
а также QString
пары отображаются в QListview
, Все это было настроено с использованием Qt Model / View Programming.
Я показываю помеченные значки в этом QListView
, Элементы отображаются с помощью IconMode
, Snap
а также TopToBottom
флаги. Таким образом, они организованы в сетку.
Я хотел бы разметить все QListView
предметы по вертикали и по центру. Чтобы сделать это, я подкласс QStyledItemDelegate
объект, и перегружен метод рисования. Однако у меня есть три основные проблемы:
QStyledItemDelegate
подклассы) и пунктирный квадрат появляется в своем первоначальном месте.setGridSize
не называется. Я хотел бы использовать только одну «колонку».Вот кусок кода:
QListView
: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);
QStyledItemDelegate
: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); }
Если я не использую initStyleOption
как показано выше, я могу удалить
пунктир, но я теряю все стили по умолчанию.
Если я раскомментирую initStyleOption
, Появится пунктирный квадрат. Я также теряю все стили по умолчанию.
Вот несколько скриншотов:
Курсор находится на элементе 0 (без наведения, без выделения).
Элемент 0 был выбран. Появляется маленький пунктирный квадрат (initStyleOption
был оставлен без комментариев).
Я перешел на ListMode
, Выбор украшения работает, но не зависать. Снова, маленький пунктирный квадрат появляется в исходном месте этикетки.
У кого-нибудь есть идея? Спасибо за ваши ответы.
Задача ещё не решена.
Других решений пока нет …