项目一:
源码分析:
void CustomizedItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(2 == index.column())
{
const int Delta = 4;
int x = option.rect.x() + Delta;
int y = option.rect.y() + Delta;
int width = option.rect.width() - 2*Delta;
int height = option.rect.height() - 2*Delta;
int progress = index.data(Qt::DisplayRole).toInt();
QStyleOptionProgressBar progressBar;
progressBar.minimum = 0;
progressBar.maximum = 100;
progressBar.progress = progress;
progressBar.rect = QRect(x, y, width, height);
progressBar.textVisible = true;
progressBar.textAlignment = Qt::AlignCenter;
progressBar.text = QString("%1%").arg(progress);
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBar, painter);
}
else
{
QItemDelegate::paint(painter, option, index);
}
}
bool CustomizedItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
bool ret = true;
if(QEvent::MouseButtonDblClick != event->type())
{
ret = QItemDelegate::editorEvent(event, model, option, index);
}
return ret;
}
项目二:
源码分析:
void CustomizedItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
if(QVariant::Bool == index.data(Qt::DisplayRole).type())
{
QStyleOptionButton check;
check.state = index.data().toBool() ? QStyle::State_On : QStyle::State_Off;
check.state |= QStyle::State_Enabled;
check.rect = option.rect;
check.rect.setX(option.rect.x() + option.rect.width()/2 - 6);
QApplication::style()->drawControl(QStyle::CE_CheckBox, &check, painter);
}
else
{
QItemDelegate::paint(painter, option, index);
}
}
bool CustomizedItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
bool ret = true;
qDebug() << "CustomizedItemDelegate::editorEvent";
if(QVariant::Bool == index.data().type())
{
QMouseEvent* mouse = dynamic_cast<QMouseEvent*>(event);
if( (NULL != mouse) && (QEvent::MouseButtonPress == mouse->type()) && (option.rect.contains(mouse->pos())) )
{
model->setData(index, !index.data().toBool(), Qt::DisplayRole);
}
}
else
{
ret = QItemDelegate::editorEvent(event, model, option, index);
}
return ret;
}
源码链接(总共2个):DelegateDeep.rar-QT文档类资源-CSDN下载