void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); painter->save(); QFont aliasFont = QApplication::font(); QFont subFont = QApplication::font(); QFont errorFont = subFont; //font.setPixelSize(font.weight()+); aliasFont.setBold(true); aliasFont.setPointSize( subFont.pointSize()+2 ); QFontMetrics subFm( subFont ); QFontMetrics aliasFm( aliasFont ); int margin = aliasFm.height()/2; QIcon folderIcon = qvariant_cast<QIcon>(index.data(FolderIconRole)); QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIcon)); QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole)); QString pathText = qvariant_cast<QString>(index.data(FolderPathRole)); QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole)); QString errorText = qvariant_cast<QString>(index.data(FolderErrorMsg)); // QString statusText = qvariant_cast<QString>(index.data(FolderStatus)); bool syncEnabled = index.data(FolderSyncEnabled).toBool(); // QString syncStatus = syncEnabled? tr( "Enabled" ) : tr( "Disabled" ); QSize iconsize(48, 48); // = icon.actualSize(option.decorationSize); QRect aliasRect = option.rect; QRect iconRect = option.rect; iconRect.setLeft( margin ); iconRect.setWidth( 48 ); iconRect.setTop( iconRect.top() + margin ); // (iconRect.height()-iconsize.height())/2); QRect statusRect = iconRect; statusRect.setLeft( option.rect.right() - margin - 48 ); statusRect.setRight( option.rect.right() - margin ); aliasRect.setLeft(iconRect.right()+margin); aliasRect.setTop(aliasRect.top() + aliasFm.height()/2 ); aliasRect.setBottom(aliasRect.top()+subFm.height()); // local directory box QRect localPathRect = aliasRect; localPathRect.setTop(aliasRect.bottom() + margin / 3); localPathRect.setBottom(localPathRect.top()+subFm.height()); // remote directory box QRect remotePathRect = localPathRect; remotePathRect.setTop( localPathRect.bottom() + subFm.height()/2 ); remotePathRect.setBottom( remotePathRect.top() + subFm.height()); iconRect.setBottom(remotePathRect.bottom()); //painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height())); if( syncEnabled ) { painter->drawPixmap(QPoint(iconRect.left(),iconRect.top()), folderIcon.pixmap(iconsize.width(),iconsize.height())); } else { painter->drawPixmap(QPoint(iconRect.left(),iconRect.top()), folderIcon.pixmap(iconsize.width(),iconsize.height(), QIcon::Disabled )); } painter->drawPixmap(QPoint(statusRect.left(), statusRect.top()), statusIcon.pixmap(48,48)); painter->setFont(aliasFont); painter->drawText(aliasRect, aliasText); painter->setFont(subFont); painter->drawText(localPathRect.left(),localPathRect.top()+17, pathText); painter->drawText(remotePathRect, tr("Remote path: %1").arg(remotePath)); // paint an error overlay if there is an error string if( !errorText.isEmpty() ) { QRect errorRect = localPathRect; errorRect.setLeft( iconRect.left()); errorRect.setTop( iconRect.bottom()+subFm.height()/2 ); errorRect.setHeight(subFm.height()+margin); errorRect.setRight( statusRect.right() ); painter->setBrush( QColor(0xbb, 0x4d, 0x4d) ); painter->setPen( QColor(0xaa, 0xaa, 0xaa)); painter->drawRoundedRect( errorRect, 4, 4 ); QIcon warnIcon(":/mirall/resources/warning-16"); painter->drawPixmap( QPoint(errorRect.left()+2, errorRect.top()+2), warnIcon.pixmap(QSize(16,16))); painter->setPen( Qt::white ); painter->setFont(errorFont); QRect errorTextRect = errorRect; errorTextRect.setLeft( errorTextRect.left()+margin/2 +16); errorTextRect.setTop( errorTextRect.top()+margin/2 ); int linebreak = errorText.indexOf(QLatin1String("<br")); QString eText = errorText; if(linebreak) { eText = errorText.left(linebreak); } painter->drawText(errorTextRect, eText); } // painter->drawText(lastSyncRect, tr("Last Sync: %1").arg( statusText )); // painter->drawText(statusRect, tr("Sync Status: %1").arg( syncStatus )); painter->restore(); }
void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); QSize s = sizeHint( option, index ); painter->save(); QFont aliasFont = QApplication::font(); QFont subFont = QApplication::font(); //font.setPixelSize(font.weight()+); aliasFont.setBold(true); aliasFont.setPointSize( subFont.pointSize()+2 ); QFontMetrics subFm( subFont ); QFontMetrics aliasFm( aliasFont ); QIcon icon = qvariant_cast<QIcon>(index.data(FolderIconRole)); QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIcon)); QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole)); QString pathText = qvariant_cast<QString>(index.data(FolderPathRole)); QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole)); QString statusText = qvariant_cast<QString>(index.data(FolderStatus)); bool syncEnabled = index.data(FolderSyncEnabled).toBool(); QString syncStatus = syncEnabled? tr( "Enabled" ) : tr( "Disabled" ); QSize iconsize(48,48); // = icon.actualSize(option.decorationSize); QRect aliasRect = option.rect; QRect iconRect = option.rect; iconRect.setRight( iconsize.width()+30 ); iconRect.setTop( iconRect.top() + (iconRect.height()-iconsize.height())/2); aliasRect.setLeft(iconRect.right()); aliasRect.setTop(aliasRect.top() + aliasFm.height()/2 ); aliasRect.setBottom(aliasRect.top()+subFm.height()); // local directory box QRect localPathRect = aliasRect; localPathRect.setTop(aliasRect.bottom() + subFm.height() / 2); localPathRect.setBottom(localPathRect.top()+subFm.height()); // remote directory box QRect remotePathRect = localPathRect; remotePathRect.setTop( localPathRect.bottom() + subFm.height()/2 ); remotePathRect.setBottom( remotePathRect.top() + subFm.height()); //painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height())); painter->drawPixmap(QPoint(iconRect.left()+15,iconRect.top()),icon.pixmap(iconsize.width(),iconsize.height())); painter->drawPixmap(QPoint(option.rect.right() - 4 - 48, option.rect.top() + (option.rect.height()-48)/2 ), statusIcon.pixmap(48,48)); painter->setFont(aliasFont); painter->drawText(aliasRect, aliasText); painter->setFont(subFont); painter->drawText(localPathRect.left(),localPathRect.top()+17, pathText); painter->drawText(remotePathRect, tr("Remote path: %1").arg(remotePath)); // painter->drawText(lastSyncRect, tr("Last Sync: %1").arg( statusText )); // painter->drawText(statusRect, tr("Sync Status: %1").arg( syncStatus )); painter->restore(); }
void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); QFont aliasFont = option.font; QFont subFont = option.font; QFont errorFont = subFont; QFont progressFont = subFont; progressFont.setPointSize( subFont.pointSize()-2); //font.setPixelSize(font.weight()+); aliasFont.setBold(true); aliasFont.setPointSize( subFont.pointSize()+2 ); QFontMetrics subFm( subFont ); QFontMetrics aliasFm( aliasFont ); QFontMetrics progressFm( progressFont ); int aliasMargin = aliasFm.height()/2; int margin = subFm.height()/4; if (index.data(AddButton).toBool()) { QSize hint = sizeHint(option, index); QStyleOptionButton opt; static_cast<QStyleOption&>(opt) = option; opt.state &= ~QStyle::State_Selected; opt.state |= QStyle::State_Raised; opt.text = addFolderText(); opt.rect.setWidth(qMin(opt.rect.width(), hint.width())); opt.rect.adjust(0, aliasMargin, 0, -aliasMargin); QApplication::style()->drawControl(QStyle::CE_PushButton, &opt, painter #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) , option.widget #endif ); return; } if (static_cast<const FolderStatusModel *>(index.model())->classify(index) != FolderStatusModel::RootFolder) { return; } painter->save(); QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIconRole)); QString aliasText = qvariant_cast<QString>(index.data(HeaderRole)); QString pathText = qvariant_cast<QString>(index.data(FolderPathRole)); QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole)); QStringList errorTexts= qvariant_cast<QStringList>(index.data(FolderErrorMsg)); int overallPercent = qvariant_cast<int>(index.data(SyncProgressOverallPercent)); QString overallString = qvariant_cast<QString>(index.data(SyncProgressOverallString)); QString itemString = qvariant_cast<QString>(index.data(SyncProgressItemString)); int warningCount = qvariant_cast<int>(index.data(WarningCount)); bool syncOngoing = qvariant_cast<bool>(index.data(SyncRunning)); // QString statusText = qvariant_cast<QString>(index.data(FolderStatus)); bool syncEnabled = index.data(FolderAccountConnected).toBool(); // QString syncStatus = syncEnabled? tr( "Enabled" ) : tr( "Disabled" ); QRect iconRect = option.rect; QRect aliasRect = option.rect; iconRect.setLeft( option.rect.left() + aliasMargin ); iconRect.setTop( iconRect.top() + aliasMargin ); // (iconRect.height()-iconsize.height())/2); // alias box aliasRect.setTop(aliasRect.top() + aliasMargin ); aliasRect.setBottom(aliasRect.top() + aliasFm.height()); aliasRect.setRight(aliasRect.right() - aliasMargin ); // remote directory box QRect remotePathRect = aliasRect; remotePathRect.setTop(aliasRect.bottom() + margin ); remotePathRect.setBottom(remotePathRect.top() + subFm.height()); // local directory box QRect localPathRect = remotePathRect; localPathRect.setTop( remotePathRect.bottom() + margin ); localPathRect.setBottom( localPathRect.top() + subFm.height()); iconRect.setBottom(localPathRect.bottom()); iconRect.setWidth(iconRect.height()); int nextToIcon = iconRect.right()+aliasMargin; aliasRect.setLeft(nextToIcon); localPathRect.setLeft(nextToIcon); remotePathRect.setLeft(nextToIcon); int iconSize = iconRect.width(); QPixmap pm = statusIcon.pixmap(iconSize, iconSize, syncEnabled ? QIcon::Normal : QIcon::Disabled ); painter->drawPixmap(QPoint(iconRect.left(), iconRect.top()), pm); // only show the warning icon if the sync is running. Otherwise its // encoded in the status icon. if( warningCount > 0 && syncOngoing) { QRect warnRect; warnRect.setLeft(iconRect.left()); warnRect.setTop(iconRect.bottom()-17); warnRect.setWidth(16); warnRect.setHeight(16); QIcon warnIcon(":/client/resources/warning"); QPixmap pm = warnIcon.pixmap(16,16, syncEnabled ? QIcon::Normal : QIcon::Disabled ); painter->drawPixmap(QPoint(warnRect.left(), warnRect.top()),pm ); } auto palette = option.palette; if (qApp->style()->inherits("QWindowsVistaStyle")) { // Hack: Windows Vista's light blue is not contrasting enough for white // (code from QWindowsVistaStyle::drawControl for CE_ItemViewItem) palette.setColor(QPalette::All, QPalette::HighlightedText, palette.color(QPalette::Active, QPalette::Text)); palette.setColor(QPalette::All, QPalette::Highlight, palette.base().color().darker(108)); } QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) cg = QPalette::Inactive; if (option.state & QStyle::State_Selected) { painter->setPen(palette.color(cg, QPalette::HighlightedText)); } else { painter->setPen(palette.color(cg, QPalette::Text)); } QString elidedAlias = aliasFm.elidedText(aliasText, Qt::ElideRight, aliasRect.width()); painter->setFont(aliasFont); painter->drawText(aliasRect, elidedAlias); const bool showProgess = !overallString.isEmpty() || !itemString.isEmpty(); if(!showProgess) { painter->setFont(subFont); QString elidedRemotePathText; if (remotePath.isEmpty() || remotePath == QLatin1String("/")) { elidedRemotePathText = subFm.elidedText(tr("Syncing selected files in your account with"), Qt::ElideRight, remotePathRect.width()); } else { elidedRemotePathText = subFm.elidedText(tr("Remote path: %1").arg(remotePath), Qt::ElideMiddle, remotePathRect.width()); } painter->drawText(remotePathRect, elidedRemotePathText); QString elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width()); painter->drawText(localPathRect, elidedPathText); } // paint an error overlay if there is an error string int h = iconRect.bottom(); if( !errorTexts.isEmpty() ) { h += aliasMargin; QRect errorRect = localPathRect; errorRect.setLeft( iconRect.left()); errorRect.setTop( h ); errorRect.setHeight(errorTexts.count() * subFm.height()+aliasMargin); errorRect.setRight( option.rect.right()-aliasMargin ); painter->setBrush( QColor(0xbb, 0x4d, 0x4d) ); painter->setPen( QColor(0xaa, 0xaa, 0xaa)); painter->drawRoundedRect( errorRect, 4, 4 ); painter->setPen( Qt::white ); painter->setFont(errorFont); QRect errorTextRect = errorRect; errorTextRect.setLeft( errorTextRect.left()+aliasMargin ); errorTextRect.setTop( errorTextRect.top()+aliasMargin/2 ); int x = errorTextRect.left(); int y = errorTextRect.top()+aliasMargin/2 + subFm.height()/2; foreach( QString eText, errorTexts ) { painter->drawText(x, y, subFm.elidedText( eText, Qt::ElideLeft, errorTextRect.width()-2*aliasMargin)); y += subFm.height(); }
void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); painter->save(); QFont aliasFont = option.font; QFont subFont = option.font; QFont errorFont = subFont; //font.setPixelSize(font.weight()+); aliasFont.setBold(true); aliasFont.setPointSize( subFont.pointSize()+2 ); QFontMetrics subFm( subFont ); QFontMetrics aliasFm( aliasFont ); int aliasMargin = aliasFm.height()/2; int margin = subFm.height()/4; QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIconRole)); QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole)); QString pathText = qvariant_cast<QString>(index.data(FolderPathRole)); QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole)); QString errorText = qvariant_cast<QString>(index.data(FolderErrorMsg)); // QString statusText = qvariant_cast<QString>(index.data(FolderStatus)); bool syncEnabled = index.data(FolderSyncEnabled).toBool(); // QString syncStatus = syncEnabled? tr( "Enabled" ) : tr( "Disabled" ); QRect iconRect = option.rect; QRect aliasRect = option.rect; iconRect.setLeft( aliasMargin ); iconRect.setTop( iconRect.top() + aliasMargin ); // (iconRect.height()-iconsize.height())/2); // local directory box aliasRect.setTop(aliasRect.top() + aliasMargin ); aliasRect.setBottom(aliasRect.top() + aliasFm.height()); aliasRect.setRight(aliasRect.right() - aliasMargin ); // local directory box QRect localPathRect = aliasRect; localPathRect.setTop(aliasRect.bottom() + margin ); localPathRect.setBottom(localPathRect.top() + subFm.height()); // remote directory box QRect remotePathRect = localPathRect; remotePathRect.setTop( localPathRect.bottom() + margin ); remotePathRect.setBottom( remotePathRect.top() + subFm.height()); iconRect.setBottom(remotePathRect.bottom()); iconRect.setWidth(iconRect.height()); int nextToIcon = iconRect.right()+aliasMargin; aliasRect.setLeft(nextToIcon); localPathRect.setLeft(nextToIcon); remotePathRect.setLeft(nextToIcon); int iconSize = iconRect.width(); QPixmap pm = statusIcon.pixmap(iconSize, iconSize, syncEnabled ? QIcon::Normal : QIcon::Disabled ); painter->drawPixmap(QPoint(iconRect.left(), iconRect.top()), pm); if ((option.state & QStyle::State_Selected) && (option.state & QStyle::State_Active) // Hack: Windows Vista's light blue is not contrasting enough for white && !Application::style()->inherits("QWindowsVistaStyle")) { painter->setPen(option.palette.color(QPalette::HighlightedText)); } else { painter->setPen(option.palette.color(QPalette::Text)); } QString elidedAlias = aliasFm.elidedText(aliasText, Qt::ElideRight, aliasRect.width()); painter->setFont(aliasFont); painter->drawText(aliasRect, elidedAlias); painter->setFont(subFont); QString elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width()); painter->drawText(localPathRect, elidedPathText); QString elidedRemotePathText = subFm.elidedText(tr("Remote path: %1").arg(remotePath), Qt::ElideMiddle, remotePathRect.width()); painter->drawText(remotePathRect, elidedRemotePathText); // paint an error overlay if there is an error string if( !errorText.isEmpty() ) { QRect errorRect = localPathRect; errorRect.setLeft( iconRect.left()); errorRect.setTop( iconRect.bottom()+subFm.height()/2 ); errorRect.setHeight(subFm.height()+aliasMargin); errorRect.setRight( option.rect.right()-aliasMargin ); painter->setBrush( QColor(0xbb, 0x4d, 0x4d) ); painter->setPen( QColor(0xaa, 0xaa, 0xaa)); painter->drawRoundedRect( errorRect, 4, 4 ); QIcon warnIcon(":/mirall/resources/warning-16"); QPoint warnPos(errorRect.left()+aliasMargin/2, errorRect.top()+aliasMargin/2); painter->drawPixmap( warnPos, warnIcon.pixmap(QSize(16,16))); painter->setPen( Qt::white ); painter->setFont(errorFont); QRect errorTextRect = errorRect; errorTextRect.setLeft( errorTextRect.left()+aliasMargin +16); errorTextRect.setTop( errorTextRect.top()+aliasMargin/2 ); int linebreak = errorText.indexOf(QLatin1String("<br")); QString eText = errorText; if(linebreak) { eText = errorText.left(linebreak); } painter->drawText(errorTextRect, eText); } // painter->drawText(lastSyncRect, tr("Last Sync: %1").arg( statusText )); // painter->drawText(statusRect, tr("Sync Status: %1").arg( syncStatus )); painter->restore(); }
void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); painter->save(); QFont aliasFont = option.font; QFont subFont = option.font; QFont errorFont = subFont; QFont progressFont = subFont; progressFont.setPointSize( subFont.pointSize()-1); //font.setPixelSize(font.weight()+); aliasFont.setBold(true); aliasFont.setPointSize( subFont.pointSize()+2 ); QFontMetrics subFm( subFont ); QFontMetrics aliasFm( aliasFont ); QFontMetrics progressFm( progressFont ); int aliasMargin = aliasFm.height()/2; int margin = subFm.height()/4; QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIconRole)); QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole)); QString pathText = qvariant_cast<QString>(index.data(FolderPathRole)); QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole)); QStringList errorTexts= qvariant_cast<QStringList>(index.data(FolderErrorMsg)); int overallPercent = qvariant_cast<int>(index.data(SyncProgressOverallPercent)); QString overallString = qvariant_cast<QString>(index.data(SyncProgressOverallString)); QString itemString = qvariant_cast<QString>(index.data(SyncProgressItemString)); int warningCount = qvariant_cast<int>(index.data(WarningCount)); bool syncOngoing = qvariant_cast<bool>(index.data(SyncRunning)); // QString statusText = qvariant_cast<QString>(index.data(FolderStatus)); bool syncEnabled = index.data(FolderSyncEnabled).toBool(); // QString syncStatus = syncEnabled? tr( "Enabled" ) : tr( "Disabled" ); QRect iconRect = option.rect; QRect aliasRect = option.rect; iconRect.setLeft( aliasMargin ); iconRect.setTop( iconRect.top() + aliasMargin ); // (iconRect.height()-iconsize.height())/2); // alias box aliasRect.setTop(aliasRect.top() + aliasMargin ); aliasRect.setBottom(aliasRect.top() + aliasFm.height()); aliasRect.setRight(aliasRect.right() - aliasMargin ); // remote directory box QRect remotePathRect = aliasRect; remotePathRect.setTop(aliasRect.bottom() + margin ); remotePathRect.setBottom(remotePathRect.top() + subFm.height()); // local directory box QRect localPathRect = remotePathRect; localPathRect.setTop( remotePathRect.bottom() + margin ); localPathRect.setBottom( localPathRect.top() + subFm.height()); iconRect.setBottom(localPathRect.bottom()); iconRect.setWidth(iconRect.height()); int nextToIcon = iconRect.right()+aliasMargin; aliasRect.setLeft(nextToIcon); localPathRect.setLeft(nextToIcon); remotePathRect.setLeft(nextToIcon); int iconSize = iconRect.width(); QPixmap pm = statusIcon.pixmap(iconSize, iconSize, syncEnabled ? QIcon::Normal : QIcon::Disabled ); painter->drawPixmap(QPoint(iconRect.left(), iconRect.top()), pm); // only show the warning icon if the sync is running. Otherwise its // encoded in the status icon. if( warningCount > 0 && syncOngoing) { QRect warnRect; warnRect.setLeft(iconRect.left()); warnRect.setTop(iconRect.bottom()-17); warnRect.setWidth(16); warnRect.setHeight(16); QIcon warnIcon(":/mirall/resources/warning-16"); QPixmap pm = warnIcon.pixmap(16,16, syncEnabled ? QIcon::Normal : QIcon::Disabled ); painter->drawPixmap(QPoint(warnRect.left(), warnRect.top()),pm ); } if ((option.state & QStyle::State_Selected) && (option.state & QStyle::State_Active) // Hack: Windows Vista's light blue is not contrasting enough for white && !qApp->style()->inherits("QWindowsVistaStyle")) { painter->setPen(option.palette.color(QPalette::HighlightedText)); } else { painter->setPen(option.palette.color(QPalette::Text)); } QString elidedAlias = aliasFm.elidedText(aliasText, Qt::ElideRight, aliasRect.width()); painter->setFont(aliasFont); painter->drawText(aliasRect, elidedAlias); painter->setFont(subFont); QString elidedRemotePathText; if (remotePath.isEmpty() || remotePath == QLatin1String("/")) { elidedRemotePathText = subFm.elidedText(tr("Syncing all files in your account with"), Qt::ElideRight, remotePathRect.width()); } else { elidedRemotePathText = subFm.elidedText(tr("Remote path: %1").arg(remotePath), Qt::ElideMiddle, remotePathRect.width()); } painter->drawText(remotePathRect, elidedRemotePathText); QString elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width()); painter->drawText(localPathRect, elidedPathText); // paint an error overlay if there is an error string int h = iconRect.bottom(); if( !errorTexts.isEmpty() ) { h += aliasMargin; QRect errorRect = localPathRect; errorRect.setLeft( iconRect.left()); errorRect.setTop( h ); errorRect.setHeight(errorTexts.count() * subFm.height()+aliasMargin); errorRect.setRight( option.rect.right()-aliasMargin ); painter->setBrush( QColor(0xbb, 0x4d, 0x4d) ); painter->setPen( QColor(0xaa, 0xaa, 0xaa)); painter->drawRoundedRect( errorRect, 4, 4 ); painter->setPen( Qt::white ); painter->setFont(errorFont); QRect errorTextRect = errorRect; errorTextRect.setLeft( errorTextRect.left()+aliasMargin ); errorTextRect.setTop( errorTextRect.top()+aliasMargin/2 ); int x = errorTextRect.left(); int y = errorTextRect.top()+aliasMargin/2 + subFm.height()/2; foreach( QString eText, errorTexts ) { painter->drawText(x, y, subFm.elidedText( eText, Qt::ElideLeft, errorTextRect.width()-2*aliasMargin)); y += subFm.height(); }