рдПрдХ рд╕реВрдЪреА рдЕрд▓рд╛ рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

Qt рдкрд░ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рддреБрд▓рдирд╛ред рдпрд╣ рд▓реЗрдЦ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЧрд╛ред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдорд╡реАрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХреНрдпреВрдЯреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓реЗрдЧрд╛:


рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ 3 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  1. рдореЙрдбрд▓ рдирд┐рд░реНрдорд╛рдг
  2. рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд░рдЪрдирд╛
  3. рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдмрдирд╛рдирд╛




рдореЙрдбрд▓ рдирд┐рд░реНрдорд╛рдг


рдХреНрдпреВрдЯреА рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдмреБрдирд┐рдпрд╛рджреА рдореЙрдбрд▓ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдкреЗрдбрд╝ рдореЙрдбрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдпрд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо QAbstractItemModel рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рд╕рд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред

int columnCount ( const QModelIndex & parent = QModelIndex() ) const; QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const; QModelIndex parent ( const QModelIndex & index ) const; int rowCount ( const QModelIndex & parent = QModelIndex() ) const; Qt::ItemFlags flags ( const QModelIndex & index ) const; 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ); 


рдореИрдВ рдореЙрдбрд▓ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрд▓рдЧреНрди рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд┐рд░реНрдорд╛рдг


рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛ рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдореБрдЭреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ QItemDelegate рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╡рд╣рд╛рдБ рдХрдИ рдЙрдкрдпреЛрдЧреА рд╕рдорд╛рдзрд╛рди рд╣реИрдВред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдХрд╛рдо рддрддреНрд╡ рдХреЛ рджреГрд╢реНрдп рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╣рдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЯрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред
рдбреНрд░рд╛рдЗрдВрдЧ

рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкреЗрдВрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реИ:
 void QvObjectDelegate::paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const { painter->save(); if(index.parent().isValid()) { if(needRestart(index)) { drawItemBackground(painter, option, index); paintObjectHeader(painter, option, index); } paintObject(painter, option, index); } else { paintHeader(painter, option, index); } painter->restore(); painter->save(); painter->setPen(QColor(0xD7, 0xD7, 0xD7)); painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight()); painter->restore(); } 

рдкреНрд░рджрд░реНрд╢рд┐рдд рддрддреНрд╡ рд╣реЗрдбрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдЙрдЪрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдПрдХ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рднрдпрд╛рдирдХ рдЕрдкрдардиреАрдп рдлреБрдЯрдХреНрд▓реЙрде рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдЫреЛрдЯреЗ / рд╕рд░рд▓ рддрд░реАрдХреЗ, рдЙрдиреНрд╣реЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖рдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ

 void QvObjectDelegate::paintHeader( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const { QPainter &p = *painter; p.save(); p.setClipRect(option.rect); p.setPen(QColor(77, 77, 77)); //   QRect tr; QString name = index.data(Qt::DisplayRole).toString(), desc = index.data(QvObjectModel::DetailRole).toString(); QFont f = option.font; f.setPointSize(12); f.setWeight(QFont::Bold); QFontMetrics fm(f); tr = fm.boundingRect(name); p.setFont(f); p.drawText(option.rect, Qt::AlignVCenter | Qt::AlignLeft, name); f = option.font; f.setWeight(QFont::DemiBold); p.setFont(f); p.drawText(option.rect, Qt::AlignVCenter | Qt::AlignRight, desc); p.restore(); } 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рд╣рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯрдм рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдКрдВрдЪрд╛рдИ рдФрд░ рдмрд╛рдПрдВ рдХрд┐рдирд╛рд░реЗ рдореЗрдВ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рд╡рд┐рд╡рд░рдг рдХреЛ рджрд╛рдИрдВ рдУрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рддрддреНрд╡ рд╢рд░реАрд░ рдЦреАрдВрдЪрдирд╛

 void QvObjectDelegate::paintObject(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const { QRect tr; QString name = index.data(Qt::DisplayRole).toString(), description = index.data(QvObjectModel::DescriptionRole).toString(); QPainter &p = *painter; p.setClipRect(option.rect); p.setPen(QColor(210, 210, 210)); p.setBrush(QColor(240, 240, 240)); p.setPen(QColor(77, 77, 77)); p.translate(option.rect.topLeft()); p.translate(0, sizeHint(option, index).height() - ITEM_HEIGHT); p.translate(OFFSET_H, OFFSET_H); QImage img = index.data(Qt::DecorationRole).value<QImage>(); if(!img.isNull()) { p.drawImage(0,0, img); } else { p.drawImage(0,0, defaultIcon_); } p.translate(ICON_SIZE + OFFSET_H, 0); //     10px //   QFont f = option.font; f.setPointSize(10); f.setWeight(QFont::Bold); QFontMetrics fm(f); tr = fm.boundingRect(name); p.setFont(f); p.drawText(0, tr.height()-5, name); //   p.setFont(option.font); fm = QFontMetrics(option.font); QDate date_ = index.data(QvObjectModel::DateRole).toDate(); int version_ = index.data(QvObjectModel::VersionRole).toInt(); QString versionStr_; if(!date_.isNull()) { versionStr_ = date_.toString("dd MMMM yyyy"); } else if(version_ > 1000000000){ int ver_min = 0; int ver = version_ / 1000000000; ver_min = version_ % 1000000000; int major = ver_min / 10000000; ver_min = ver_min % 10000000; int minor = ver_min / 100000; ver_min = ver_min % 100000; versionStr_ = QCoreApplication::translate("list", "%1.%2.%3.%4", "Version in list") .arg(ver).arg(major, 2, 10, QLatin1Char('0') ) .arg(minor, 2, 10, QLatin1Char('0')).arg(ver_min); } if(!versionStr_.isEmpty()) { tr = fm.boundingRect(versionStr_); tr.moveTo(option.rect.width() - ICON_SIZE - 2*OFFSET_H - tr.width() - OFFSET_BUTTON, 0 ); painter->drawText(tr, Qt::TextSingleLine, versionStr_); } int maxWidth(option.rect.width() - widthButtonGroup(index) - ICON_SIZE - OFFSET_H - DETAIL_OFFSET ); if(!index.data(QvObjectModel::DetailRole).toString().isEmpty()) { maxWidth -= fm.boundingRect(QCoreApplication::translate("list", "Detail")).width(); } description = fm.elidedText(description, Qt::ElideRight, maxWidth); p.translate(0, ICON_SIZE / 2); tr = fm.boundingRect(description); p.drawText(0, tr.height(), description); if(!index.data(QvObjectModel::DetailRole).toString().isEmpty()) { paintDetail(painter, option, index); } if(index.flags().testFlag(Qt::ItemFlag(QvAbstractListItem::Downloading))) { paintObjectProgress(painter, option, index); } paintObjectBtn(painter, option, index); } 

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреНрд░рд╛рдЗрдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдЧрд▓рддреА рд╕реЗ рд╣рдорд╛рд░реЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдкрд░ рдЪрдврд╝рд╛рдИ рди рдХрд░реЗрдВред
рджреВрд╕рд░рд╛ рдЪрд░рдг рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ:
  p.translate(option.rect.topLeft()); p.translate(0, sizeHint(option, index).height() - ITEM_HEIGHT); p.translate(OFFSET_H, OFFSET_H); 

рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдирд╛ рд╕рдВрджреЗрд╢ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдХрдо рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдЖрдЗрдХрди, рдирд╛рдо, рд╡рд┐рд╡рд░рдг рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╢реЗрдбреНрдпреВрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рда рдХреЛ рдмрдЯрди рдФрд░ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рддрд╣рдд рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪреМрдбрд╝рд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрд╛рдЯрддреЗ рд╣реИрдВред

рдбреНрд░рд╛рдЗрдВрдЧ рдмрдЯрди рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдмрд╛рд░

рдЪреВрдВрдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреА рддрд░рд╣ рд╣реА рджрд┐рдЦреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╢реИрд▓реА рд╕реЗрдЯ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЪрд▓рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдбрд┐рдХреЗрдЯрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
 void QvObjectDelegate::paintObjectProgress( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const { QStyleOptionProgressBarV2 opt; initStyleProgressOption(&opt, index); QStyle *style = QApplication::style(); opt.rect.setLeft(option.rect.width() - (CHECK_WIDTH + OFFSET_H) * 2 - ICON_SIZE - OFFSET_BUTTON - buttonRect.width() - OFFSET_BUTTON ); opt.rect.setTop( 4 ); opt.rect.setWidth(CHECK_WIDTH * 2); opt.rect.setHeight(PROGRESS_HEIGHT); painter->setPen(QColor(77, 77, 77)); style->drawControl(QStyle::CE_ProgressBar, &opt, painter); } void QvObjectDelegate::initStyleProgressOption( QStyleOptionProgressBar *option, const QModelIndex & index ) const { int value = index.data(QvObjectModel::ProgressRole).toInt(); if (!option) return; option->rect = QRect(100, 100, 100, 100); option->state |= QStyle::State_Active; option->state |= QStyle::State_Enabled; option->state |= QStyle::State_Horizontal; option->minimum = 0; option->maximum = 100; //maximum?maximum:100; option->progress = value; option->textAlignment = Qt::AlignCenter; option->textVisible = true; option->text = QString("%1%").arg(value); if (QStyleOptionProgressBarV2 *optionV2 = qstyleoption_cast<QStyleOptionProgressBarV2 *>(option)) { optionV2->orientation = Qt::Horizontal ; // ### Qt 5: use State_Horizontal instead optionV2->invertedAppearance = false; optionV2->bottomToTop = true; } } 

рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЖрдзрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо QProgressBar рдерд╛ред рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо QStyleOptionProgressBarV2 рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдкреВрд░рдгреАрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рднрд░рддреЗ рд╣реИрдВ (рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦреЗрдВ)ред рд╣рдордиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ, рдЕрдзрд┐рдХрддрдо рдФрд░ рд╡рд░реНрддрдорд╛рди рдорд╛рди, рд╕рд╛рде рд╣реА рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХрд╛ рдкрд╛рда рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХреЗрддрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдм рд╢реИрд▓реА рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  style->drawControl(QStyle::CE_ProgressBar, &opt, painter); 

рд╕реВрдЪрдХ рдХреЗ рдмрд╛рдж, рдмрдЯрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╡реИрдз рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  QVector<QvObjectDelegate::ButtonAction> QvObjectDelegate::getButtons( const QModelIndex &index ) const { QVector<ButtonAction> tags_; if(needRestart(index) ) { tags_ << baRestart << baCancel; } else if( index.flags() & Qt::ItemFlag(QvAbstractListItem::Downloading) ) { tags_ << baCancel; } else { bool installed = index.data(QvObjectModel::InstalledRole).toBool(), enabled = index.data(QvObjectModel::EnabledRole).toBool(), buildin = index.data(QvObjectModel::BuildInRole).toBool(); if (installed && (index.flags() & Qt::ItemFlag(QvAbstractListItem::hasUpdate))) { tags_ << baUpdate;} if (installed && index.flags() & Qt::ItemFlag(QvAbstractListItem::canBeToggled)) { tags_ << (enabled ? baDisable : baEnable);} if (installed && !buildin) { tags_ << baRemove;} if (!installed) { tags_ << baInstall; } } return tags_; } 

рд╣рдо QStyleOptionButton рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рднрд░реЗрдВрдЧреЗ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣рдо рдмрдЯрди рдЦреАрдВрдЪреЗрдВрдЧреЗ:
 void QvObjectDelegate::drawButton( QStyleOptionButton &o, const QPoint &p, QPainter * painter ) const { if(o.rect.contains(p)) o.state |= QStyle::State_Sunken; QStyle * style = QApplication::style(); if(style) style->drawControl(QStyle::CE_PushButton, &o, painter ); o.state &= ~QStyle::State_Sunken; o.rect.translate(buttonRect.width() + OFFSET_BUTTON, 0); } 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рд╕реВрдЪрдирд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред





рдЗрд╕ рдкрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдмрдЯрди рдХреЛ рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рд╕рднреА рдШрдЯрдирд╛рдПрдБ рд╡рд┐рдзрд┐ рдкрд░ рдЖрддреА рд╣реИрдВ:
 bool editorEvent( QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index ); 

рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:
  Q_ASSERT(event); Q_ASSERT(model); // make sure that we have the right event type if ((event->type() == QEvent::MouseButtonRelease) || (event->type() == QEvent::MouseMove) || (event->type() == QEvent::MouseButtonPress)) { return validateLabel(index, option, event) || validateButton(index, option, event); } else if (event->type() == QEvent::KeyPress) { if (static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space && static_cast<QKeyEvent*>(event)->key() != Qt::Key_Select) return false; } else { return false; } return false; 


рд╣рдорд╛рд░реЗ рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ, рдЬрд╛рд░реА рдХрд░рдиреЗ рдФрд░ рдЙрди рдкрд░ рдордБрдбрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЖрджреЗрд╢ рдЗрд╕ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдХрд░ рдкрддреНрд░рд╛рдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдмрдЯрди рд╡рд░реНрдЧ рд╕реЗ рдЯрдХрд░рд╛рдпрд╛ред рд╣рдо рдЙрд╕ рддрддреНрд╡ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдХреЗрдд рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд┐рд╕ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдерд╛ред рд╣рдо рдбрд┐рдЯреЗрд▓ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВред

рджреГрд╢реНрдп рдмрдирд╛рдПрдБ


рд╣рдо рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП QTreeView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрдВрдбреЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЙрдЪрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдореБрдЦреНрдп рд╕рдВрдЪрд╛рд▓рди рдореЙрдбрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рд╣рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рдореЙрдбрд▓ рд╕реНрд▓реЙрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореЙрдбрд▓, рдбреЗрд▓рд┐рдЧреЗрдЯ, рдФрд░ рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрд▓рд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдореЗрдВ рдЖрдк рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реВрдЪреА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рддрддреНрд╡реЛрдВ рдХреА рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЕрдкрдбреЗрдЯ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╢рд╛рдорд┐рд▓ рдХреА рд╣реИ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлреНрд░реАрдмреАрдПрд╕рдбреА 8.2 рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рд╣реИ )ред

рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╕реНрд░реЛрдд: ajieks.ru/download/file_list.zip

рдЕрд╕реНрд╡реАрдХрд░рдг
рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реВрдЪрдирд╛ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдХрд╛рдо рдХреЗ рдорд╕реМрджреЗ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рдпрд╣ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In134802/


All Articles