07 QStyleOptionViewItem &option,
08 const QModelIndex &index) const;
09 QWidget *createEditor(QWidget *parent,
10 const QStyleOptionViewItem &option,
11 const QModelIndex &index) const;
12 void setEditorData(QWidget *editor,
13 const QModelIndex &index) const;
14 void setModelData(QWidget *editor,
15 QAbstractItemModel *model,
16 const QModelIndex &index) const;
17 private slots:
18 void commitAndCloseEditor;
19 private:
20 int durationColumn;
21 };
Мы используем
01 TrackDelegate::TrackDelegate(int durationColumn, QObject *parent)
02 : QItemDelegate(parent)
03 {
04 this->durationColumn = durationColumn;
05 }
Параметр конструктора
01 void TrackDelegate::paint(QPainter *painter,
02 const QStyleOptionViewItem &option,
03 const QModelIndex &index) const
04 {
05 if (index.column == durationColumn) {
06 int secs = index.model->data(index, Qt::DisplayRole).toInt;
07 QString text= QString("%1:%2")
08 .arg(secs/60, 2, 10, QChar('0'))
09 .arg(secs % 60, 2, 10, QChar('0'));
10 QStyleOptionViewItem myOption = option;
11 myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
12 drawDisplay(painter, myOption, myOption.rect, text);
13 drawFocus(painter, myOption, myOption.rect);
14 } else {
15 QItemDelegate::paint(painter, option, index);
16 }
17 }
Поскольку мы собираемся отображать длительность в виде «минуты : секунды», мы переопределили функцию
Для выравнивания текста вправо копируем текущие опции стиля и заменяем установленное по умолчанию выравнивание. После этого вызываем
01 QWidget *TrackDelegate::createEditor(QWidget *parent,
02 const QStyleOptionViewItem &option,
03 const QModelIndex &index) const
04 {
05 if (index.column == durationColumn) {
06 QTimeEdit *timeEdit = new QTimeEdit(parent);
07 timeEdit->setDisplayFormat("mm:ss");
08 connect(timeEdit, SIGNAL(editingFinished),