Рисование на QPixmap, который находится в QListWidget - PullRequest
0 голосов
/ 07 марта 2012

У меня есть список QListWidgetItem в QListWidget (есть полоса прокрутки Hor, так как количество элементов огромно).Каждый QListWidgetItem содержит QPixmap как данные (уменьшенные до некоторого случайного значения).Мое требование - когда щелкают QPixmap, который должен быть выделен (скругленный прямоугольник ширины кисти 10).Я делегирую каждый QListWidgetItem в QItemDelegate.У меня есть пара вопросов здесь.

  1. Как нарисовать скругленный прямоугольник QPixmap, когда выбран соответствующий QListWidgetItem?

  2. Выше упомянутоеСобытие рисования должно происходить при нажатии QPixmap (не в других частях QListWidgetItem).Поскольку QPixmaps имеют разные размеры, верхняя и нижняя часть QPixmaps в QListWidgetItem будут пустыми, и нажатие там также вызовет ItemDelegate.Как избавиться от этого выделения?

1 Ответ

0 голосов
/ 08 марта 2012

Я не знаю, возможно ли это с помощью 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);

...

На мой взгляд, инфраструктура Model / View в Qt отчасти хромая, но пока они не придут в себя, вам придется кое-что узнать, если вы хотите что-то, кроме базовых функций встроенных виджетов, которые они предоставляют вфреймворк.Другими словами, если вам нужна дополнительная функциональность с QListWidget, вам нужно изучить QListView и реализовать свою собственную модель и представление

http://qt -project.org / doc/qt-4.8/qlistview.html#details

...