QListView/QListWidget с пользовательскими объектами и пользовательскими виджетами объекта

Ознакомьтесь с документацией по адресу http://docs.angularjs.org/api/ng.filter:date . Там вы увидите нужный формат:

{{date_expression | date:'MMMM'}}

31
задан Trilarion 6 September 2015 в 10:28
поделиться

2 ответа

Я думаю, вам нужно создать подкласс QItemDelegate .

QItemDelegate может использоваться для предоставления настраиваемые функции отображения и редактор виджеты для просмотра элементов на основе Подклассы QAbstractItemView. Используя делегат для этой цели позволяет механизмы отображения и редактирования должны быть индивидуально настроены и разработаны from the model and view.

This code is taken from Qt's examples, the torrent application.

class TorrentViewDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    inline TorrentViewDelegate(MainWindow *mainWindow) : QItemDelegate(mainWindow) {}

    inline void paint(QPainter *painter, const QStyleOptionViewItem &option,
                      const QModelIndex &index ) const
    {
        if (index.column() != 2) {
            QItemDelegate::paint(painter, option, index);
            return;
        }

        // Set up a QStyleOptionProgressBar to precisely mimic the
        // environment of a progress bar.
        QStyleOptionProgressBar progressBarOption;
        progressBarOption.state = QStyle::State_Enabled;
        progressBarOption.direction = QApplication::layoutDirection();
        progressBarOption.rect = option.rect;
        progressBarOption.fontMetrics = QApplication::fontMetrics();
        progressBarOption.minimum = 0;
        progressBarOption.maximum = 100;
        progressBarOption.textAlignment = Qt::AlignCenter;
        progressBarOption.textVisible = true;

        // Set the progress and text values of the style option.
        int progress = qobject_cast<MainWindow *>(parent())->clientForRow(index.row())->progress();
        progressBarOption.progress = progress < 0 ? 0 : progress;
        progressBarOption.text = QString().sprintf("%d%%", progressBarOption.progress);

        // Draw the progress bar onto the view.
        QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
    }
};

Basically as you can see it checks if the column to be painted is of a specific index, if so it paints a progress bar. I think you could tweak it a little and instead of using a QStyleOption you could use your own widget.

edit: don't forget to setup your item delegate with your QListView using setItemDelegate.

While investigating your question I've stumbled upon this thread, which elaborates how to paint a custom widget using a QItemDelegate, I believe it has all the info you might need.

30
ответ дан 19 November 2019 в 20:47
поделиться

Assist говорит, что:

void QTableWidget::setCellWidget (int row, int column, QWidget * widget)  

Устанавливает отображение данного виджета в ячейке в данной строке и столбце, передавая право собственности на виджет стол. Если виджет ячейки A заменен виджетом ячейки B, виджет ячейки A будет удален.

И есть аналоги этому методу в большинстве потомков QAbstractItemView.

Вы должны создать подкласс Q *** Delegate только тогда, когда вы хотите, чтобы виджет редактора отображался в представлении, только когда вы нажимаете EditTrigger, затем исчезают и позволяют делегату каким-либо образом визуализировать элемент представления.

Если я поправлю,вы хотели видеть элемент управления в представлении элементов все время и иметь возможность нажимать элементы управления без необходимости входить в режим редактирования и ждать, пока делегат создаст редактор и установит его состояние, поэтому вам не нужно создавать конкретного делегата, просто установите виджет в просмотр элемента.

2
ответ дан 19 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: