From 15f2a3b564381046b3b960d46cc67163ed7657fe Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Wed, 18 Dec 2019 15:54:59 +0300 Subject: [PATCH] Use QStyledItemDelegate instead of QItemDelegate --- src/gui/transferlistdelegate.cpp | 26 ++++++++++++-------------- src/gui/transferlistdelegate.h | 13 ++++++------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/gui/transferlistdelegate.cpp b/src/gui/transferlistdelegate.cpp index 8267a1cde..bf8f95037 100644 --- a/src/gui/transferlistdelegate.cpp +++ b/src/gui/transferlistdelegate.cpp @@ -41,38 +41,36 @@ #include "transferlistmodel.h" TransferListDelegate::TransferListDelegate(QObject *parent) - : QItemDelegate(parent) + : QStyledItemDelegate {parent} { } void TransferListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() != TransferListModel::TR_PROGRESS) { - QItemDelegate::paint(painter, option, index); + QStyledItemDelegate::paint(painter, option, index); return; } - painter->save(); - - QStyleOptionViewItem opt = QItemDelegate::setOptions(index, option); - QItemDelegate::drawBackground(painter, opt, index); - QStyleOptionProgressBar newopt; - newopt.rect = opt.rect; + newopt.rect = option.rect; newopt.text = index.data().toString(); newopt.progress = static_cast(index.data(TransferListModel::UnderlyingDataRole).toReal()); newopt.maximum = 100; newopt.minimum = 0; - newopt.state |= QStyle::State_Enabled; + newopt.state = option.state; newopt.textVisible = true; #if defined(Q_OS_WIN) || defined(Q_OS_MACOS) // XXX: To avoid having the progress text on the right of the bar - QProxyStyle st("fusion"); - st.drawControl(QStyle::CE_ProgressBar, &newopt, painter); + QProxyStyle fusionStyle {"fusion"}; + QStyle *style = &fusionStyle; #else - QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter); + QStyle *style = option.widget ? option.widget->style() : QApplication::style(); #endif + + painter->save(); + style->drawControl(QStyle::CE_ProgressBar, &newopt, painter, option.widget); painter->restore(); } @@ -92,10 +90,10 @@ QSize TransferListDelegate::sizeHint(const QStyleOptionViewItem &option, const Q static int nameColHeight = -1; if (nameColHeight == -1) { const QModelIndex nameColumn = index.sibling(index.row(), TransferListModel::TR_NAME); - nameColHeight = QItemDelegate::sizeHint(option, nameColumn).height(); + nameColHeight = QStyledItemDelegate::sizeHint(option, nameColumn).height(); } - QSize size = QItemDelegate::sizeHint(option, index); + QSize size = QStyledItemDelegate::sizeHint(option, index); size.setHeight(std::max(nameColHeight, size.height())); return size; } diff --git a/src/gui/transferlistdelegate.h b/src/gui/transferlistdelegate.h index 492d260e4..0f819c7e4 100644 --- a/src/gui/transferlistdelegate.h +++ b/src/gui/transferlistdelegate.h @@ -26,24 +26,23 @@ * exception statement from your version. */ -#ifndef TRANSFERLISTDELEGATE_H -#define TRANSFERLISTDELEGATE_H +#pragma once -#include +#include class QModelIndex; class QPainter; class QStyleOptionViewItem; -class TransferListDelegate : public QItemDelegate +class TransferListDelegate : public QStyledItemDelegate { Q_OBJECT + Q_DISABLE_COPY(TransferListDelegate) public: - TransferListDelegate(QObject *parent); + explicit TransferListDelegate(QObject *parent); + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; }; - -#endif // TRANSFERLISTDELEGATE_H