本文整理汇总了C++中QRect::adjusted方法的典型用法代码示例。如果您正苦于以下问题:C++ QRect::adjusted方法的具体用法?C++ QRect::adjusted怎么用?C++ QRect::adjusted使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QRect
的用法示例。
在下文中一共展示了QRect::adjusted方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: textOption
void
PlaylistItemDelegate::paintDetailed( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
PlayableItem* item = m_model->itemFromIndex( m_model->mapToSource( index ) );
Q_ASSERT( item );
QTextOption textOption( Qt::AlignVCenter | (Qt::Alignment)index.data( Qt::TextAlignmentRole ).toUInt() );
textOption.setWrapMode( QTextOption::NoWrap );
QStyleOptionViewItemV4 opt = option;
prepareStyleOption( &opt, index, item );
opt.text.clear();
qApp->style()->drawControl( QStyle::CE_ItemViewItem, &opt, painter );
if ( m_view->hoveredIndex().row() == index.row() && m_view->hoveredIndex().column() == index.column() &&
( index.column() == PlayableModel::Artist || index.column() == PlayableModel::Album || index.column() == PlayableModel::Track ) )
{
opt.rect.setWidth( opt.rect.width() - 16 );
QRect arrowRect( opt.rect.x() + opt.rect.width(), opt.rect.y() + 1, opt.rect.height() - 2, opt.rect.height() - 2 );
QPixmap infoIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::InfoIcon, TomahawkUtils::Original, arrowRect.size() );
painter->drawPixmap( arrowRect, infoIcon );
}
painter->save();
if ( index.column() == PlayableModel::Score )
{
QColor barColor( 167, 183, 211 ); // This matches the sidebar (sourcetreeview.cpp:672)
if ( opt.state & QStyle::State_Selected )
painter->setPen( opt.palette.brightText().color() );
else
painter->setPen( barColor );
QRect r = opt.rect.adjusted( 3, 3, -6, -4 );
painter->drawRect( r );
QRect fillR = r;
int fillerWidth = (int)( index.data().toFloat() * (float)fillR.width() );
fillR.adjust( 0, 0, -( fillR.width() - fillerWidth ), 0 );
if ( opt.state & QStyle::State_Selected )
painter->setBrush( opt.palette.brightText().color() );
else
painter->setBrush( barColor );
painter->drawRect( fillR );
}
else if ( item->isPlaying() )
{
QRect r = opt.rect.adjusted( 3, 0, 0, 0 );
// Paint Now Playing Speaker Icon
if ( m_view->header()->visualIndex( index.column() ) == 0 )
{
r.adjust( 0, 0, 0, -3 );
painter->drawPixmap( r.adjusted( 3, 1, 18 - r.width(), 1 ), TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker ) );
r.adjust( 25, 0, 0, 3 );
}
painter->setPen( opt.palette.text().color() );
QString text = painter->fontMetrics().elidedText( index.data().toString(), Qt::ElideRight, r.width() - 3 );
painter->drawText( r.adjusted( 0, 1, 0, 0 ), text, textOption );
}
else
{
painter->setPen( opt.palette.text().color() );
QString text = painter->fontMetrics().elidedText( index.data().toString(), Qt::ElideRight, opt.rect.width() - 6 );
painter->drawText( opt.rect.adjusted( 3, 1, -3, 0 ), text, textOption );
}
painter->restore();
}
示例2: draw
void CWizCategoryViewItemBase::draw(QPainter* p, const QStyleOptionViewItemV4 *vopt) const
{
#if 0
if (!vopt->icon.isNull()) {
QRect iconRect = subElementRect(SE_ItemViewItemDecoration, vopt, view);
if (vopt->state.testFlag(State_Selected)) {
vopt->icon.paint(p, iconRect, Qt::AlignCenter, QIcon::Selected);
} else {
vopt->icon.paint(p, iconRect, Qt::AlignCenter, QIcon::Normal);
}
}
// text should not empty
if (vopt->text.isEmpty()) {
Q_ASSERT(0);
return;
}
// draw text little far from icon than the default
QRect textRect = subElementRect(SE_ItemViewItemText, vopt, view);
//textRect.adjust(8, 0, 0, 0);
// draw the text
QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled
? QPalette::Normal : QPalette::Disabled;
if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active))
cg = QPalette::Inactive;
if (vopt->state & QStyle::State_Selected) {
p->setPen(vopt->palette.color(cg, QPalette::HighlightedText));
} else {
p->setPen(vopt->palette.color(cg, QPalette::Text));
}
if (vopt->state & QStyle::State_Editing) {
p->setPen(vopt->palette.color(cg, QPalette::Text));
p->drawRect(textRect.adjusted(0, 0, -1, -1));
}
// compute document count string length and leave enough space for drawing
QString strCount = pItem->countString;
int nCountWidthMax;
int nMargin = 3;
QFont fontCount = p->font();
fontCount.setPointSize(10);
if (!strCount.isEmpty()) {
QFont fontOld = p->font();
p->setFont(fontCount);
nCountWidthMax = p->fontMetrics().width(strCount) + nMargin;
textRect.adjust(0, 0, -nCountWidthMax, 0);
p->setFont(fontOld);
}
QFont f = p->font();
f.setPixelSize(12);
p->setFont(f);
QColor colorText = vopt->state.testFlag(State_Selected) ?
m_colorCategoryTextSelected : m_colorCategoryTextNormal;
CString strText = vopt->text;
int nWidth = ::WizDrawTextSingleLine(p, textRect, strText,
Qt::TextSingleLine | Qt::AlignVCenter,
colorText, true);
// only draw document count if count string is not empty
if (!strCount.isEmpty()) {
p->setFont(fontCount);
textRect.adjust(nWidth + nMargin, 0, nCountWidthMax, 0);
QColor colorCount = vopt->state.testFlag(State_Selected) ? QColor(230, 230, 230) : QColor(150, 150, 150);
CString strCount2(strCount);
::WizDrawTextSingleLine(p, textRect, strCount2, Qt::TextSingleLine | Qt::AlignVCenter, colorCount, false);
}
p->restore();
#endif
}
示例3: printer
...
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
QPainter painter(&printer);
// print, fitting the viewport contents into a full page
view.render(&painter);
// print the upper half of the viewport into the lower.
// half of the page.
QRect viewport = view.viewport()->rect();
view.render(&painter,
QRectF(0, printer.height() / 2,
printer.width(), printer.height() / 2),
viewport.adjusted(0, 0, 0, -viewport.height() / 2));
//! [4]
//! [5]
void CustomView::mousePressEvent(QMouseEvent *event)
{
qDebug() << "There are" << items(event->pos()).size()
<< "items at position" << mapToScene(event->pos());
}
//! [5]
//! [6]
void CustomView::mousePressEvent(QMouseEvent *event)
示例4: drawControl
void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget) const
{
if (!panelWidget(widget))
return QProxyStyle::drawControl(element, option, painter, widget);
switch (element) {
case CE_Splitter:
painter->fillRect(option->rect, Utils::StyleHelper::borderColor());
break;
case CE_TabBarTabShape:
// Most styles draw a single dark outline. This looks rather ugly when combined with our
// single pixel dark separator so we adjust the first tab to compensate for this
if (const QStyleOptionTabV3 *tab = qstyleoption_cast<const QStyleOptionTabV3 *>(option)) {
QStyleOptionTabV3 adjustedTab = *tab;
if (!hasProperty(widget, "noTabBarShapeAdjustment") &&
tab->cornerWidgets == QStyleOptionTab::NoCornerWidgets && (
tab->position == QStyleOptionTab::Beginning ||
tab->position == QStyleOptionTab::OnlyOneTab))
{
if (option->direction == Qt::LeftToRight)
adjustedTab.rect = adjustedTab.rect.adjusted(-1, 0, 0, 0);
else
adjustedTab.rect = adjustedTab.rect.adjusted(0, 0, 1 ,0);
}
QProxyStyle::drawControl(element, &adjustedTab, painter, widget);
return;
}
break;
case CE_MenuBarItem:
painter->save();
if (const QStyleOptionMenuItem *mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
QColor highlightOutline = Utils::StyleHelper::borderColor().lighter(120);
bool act = mbi->state & State_Sunken;
bool dis = !(mbi->state & State_Enabled);
Utils::StyleHelper::menuGradient(painter, option->rect, option->rect);
QStyleOptionMenuItem item = *mbi;
item.rect = mbi->rect;
QPalette pal = mbi->palette;
pal.setBrush(QPalette::ButtonText, dis ? Qt::gray : Qt::black);
item.palette = pal;
QCommonStyle::drawControl(element, &item, painter, widget);
QRect r = option->rect;
if (act) {
// Fill|
QColor baseColor = Utils::StyleHelper::baseColor();
QLinearGradient grad(option->rect.topLeft(), option->rect.bottomLeft());
grad.setColorAt(0, baseColor.lighter(120));
grad.setColorAt(1, baseColor.lighter(130));
painter->fillRect(option->rect.adjusted(1, 1, -1, 0), grad);
// Outline
painter->setPen(QPen(highlightOutline, 0));
painter->drawLine(QPoint(r.left(), r.top() + 1), QPoint(r.left(), r.bottom()));
painter->drawLine(QPoint(r.right(), r.top() + 1), QPoint(r.right(), r.bottom()));
painter->drawLine(QPoint(r.left() + 1, r.top()), QPoint(r.right() - 1, r.top()));
highlightOutline.setAlpha(60);
painter->setPen(QPen(highlightOutline, 0));
painter->drawPoint(r.topLeft());
painter->drawPoint(r.topRight());
QPalette pal = mbi->palette;
uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
if (!styleHint(SH_UnderlineShortcut, mbi, widget))
alignment |= Qt::TextHideMnemonic;
pal.setBrush(QPalette::Text, dis ? Qt::gray : QColor(0, 0, 0, 60));
drawItemText(painter, item.rect.translated(0, 1), alignment, pal, mbi->state & State_Enabled, mbi->text, QPalette::Text);
pal.setBrush(QPalette::Text, dis ? Qt::gray : Qt::white);
drawItemText(painter, item.rect, alignment, pal, mbi->state & State_Enabled, mbi->text, QPalette::Text);
}
}
painter->restore();
break;
case CE_ComboBoxLabel:
if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
if (panelWidget(widget)) {
painter->save();
QRect editRect = subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget);
QPalette customPal = cb->palette;
bool drawIcon = !(widget && widget->property("hideicon").toBool());
if (!cb->currentIcon.isNull() && drawIcon) {
QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal
: QIcon::Disabled;
QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, mode);
QRect iconRect(editRect);
iconRect.setWidth(cb->iconSize.width() + 4);
iconRect = alignedRect(cb->direction,
Qt::AlignLeft | Qt::AlignVCenter,
iconRect.size(), editRect);
if (cb->editable)
painter->fillRect(iconRect, customPal.brush(QPalette::Base));
drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap);
if (cb->direction == Qt::RightToLeft)
//.........这里部分代码省略.........
示例5: paint
//! [paint start]
bool MyDecoration::paint(QPainter *painter, const QWidget *widget,
int decorationRegion, DecorationState state)
{
if (decorationRegion == None)
return false;
//! [paint start]
//! [paint different regions]
bool handled = false;
QPalette palette = QApplication::palette();
QHash<DecorationRegion, QPixmap> buttonPixmaps;
if (widget->windowState() == Qt::WindowMaximized)
buttonPixmaps = maximizedButtonPixmaps;
else
buttonPixmaps = normalButtonPixmaps;
if (decorationRegion & Title) {
QRect rect = QDecoration::region(widget, Title).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Base));
painter->save();
painter->setPen(QPen(palette.color(QPalette::Text)));
painter->drawText(rect, Qt::AlignCenter, widget->windowTitle());
painter->restore();
handled = true;
}
if (decorationRegion & Top) {
QRect rect = QDecoration::region(widget, Top).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & Left) {
QRect rect = QDecoration::region(widget, Left).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & Right) {
QRect rect = QDecoration::region(widget, Right).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & Bottom) {
QRect rect = QDecoration::region(widget, Bottom).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & TopLeft) {
QRect rect = QDecoration::region(widget, TopLeft).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & TopRight) {
QRect rect = QDecoration::region(widget, TopRight).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & BottomLeft) {
QRect rect = QDecoration::region(widget, BottomLeft).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
if (decorationRegion & BottomRight) {
QRect rect = QDecoration::region(widget, BottomRight).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Dark));
handled = true;
}
//! [paint different regions]
//! [paint buttons]
int margin = (titleHeight - 16) / 2;
Qt::WindowFlags flags = widget->windowFlags();
foreach (DecorationRegion testRegion, stateRegions) {
if (decorationRegion & testRegion && flags & buttonHintMap.key(testRegion)) {
QRect rect = QDecoration::region(
widget, testRegion).boundingRect();
painter->fillRect(rect, palette.brush(QPalette::Base));
QRect buttonRect = rect.adjusted(0, margin, -buttonMargin - margin,
-buttonMargin);
painter->drawPixmap(buttonRect.topLeft(), buttonPixmaps[testRegion]);
handled = true;
}
}
//! [paint buttons]
//! [paint end]
return handled;
}
示例6: painter
void
PlayableCover::paintEvent( QPaintEvent* event )
{
Q_UNUSED( event );
QPainter painter( this );
painter.setRenderHint( QPainter::Antialiasing );
painter.drawPixmap( 0, 0, pixmap() );
if ( !m_showText )
return;
QRect r = contentsRect().adjusted( margin(), margin(), -margin(), -margin() );
QPixmap buffer( r.size() );
buffer.fill( Qt::transparent );
QPainter bufpainter( &buffer );
bufpainter.setRenderHint( QPainter::Antialiasing );
QTextOption to;
to.setWrapMode( QTextOption::NoWrap );
QColor c1;
c1.setRgb( 0, 0, 0 );
c1.setAlphaF( 0.00 );
QColor c2;
c2.setRgb( 0, 0, 0 );
c2.setAlphaF( 0.88 );
QString text;
QFont font = QLabel::font();
font.setPointSize( TomahawkUtils::defaultFontSize() );
QFont boldFont = font;
boldFont.setBold( true );
boldFont.setPointSize( TomahawkUtils::defaultFontSize() + 5 );
QString top, bottom;
if ( m_artist )
{
top = m_artist->name();
}
else if ( m_album )
{
top = m_album->name();
bottom = m_album->artist()->name();
}
else if ( m_query )
{
top = m_query->queryTrack()->track();
bottom = m_query->queryTrack()->artist();
}
int bottomHeight = QFontMetrics( font ).boundingRect( bottom ).height();
int topHeight = QFontMetrics( boldFont ).boundingRect( top ).height();
int frameHeight = bottomHeight + topHeight + 4;
QRect gradientRect = r.adjusted( 0, r.height() - frameHeight * 3, 0, 0 );
QLinearGradient gradient( QPointF( 0, 0 ), QPointF( 0, 1 ) );
gradient.setCoordinateMode( QGradient::ObjectBoundingMode );
gradient.setColorAt( 0.0, c1 );
gradient.setColorAt( 0.6, c2 );
gradient.setColorAt( 1.0, c2 );
bufpainter.save();
bufpainter.setPen( Qt::transparent );
bufpainter.setBrush( gradient );
bufpainter.drawRect( gradientRect );
bufpainter.restore();
bufpainter.setPen( Qt::white );
QRect textRect = r.adjusted( 8, r.height() - frameHeight - 16, -8, -16 );
bool oneLiner = false;
if ( bottom.isEmpty() )
oneLiner = true;
bufpainter.setFont( boldFont );
if ( oneLiner )
{
bufpainter.save();
QFont f = bufpainter.font();
while ( f.pointSizeF() > 9 && bufpainter.fontMetrics().width( top ) > textRect.width() )
{
f.setPointSizeF( f.pointSizeF() - 0.2 );
bufpainter.setFont( f );
}
to.setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
text = bufpainter.fontMetrics().elidedText( top, Qt::ElideRight, textRect.width() - 3 );
bufpainter.drawText( textRect, text, to );
bufpainter.restore();
}
else
{
to.setAlignment( Qt::AlignHCenter | Qt::AlignTop );
text = bufpainter.fontMetrics().elidedText( top, Qt::ElideRight, textRect.width() - 3 );
bufpainter.drawText( textRect, text, to );
bufpainter.setFont( font );
//.........这里部分代码省略.........
示例7: paintEvent
void TimeTrackingView::paintEvent( QPaintEvent* e )
{
m_activeFieldRects.clear();
const int FieldHeight = m_cachedTotalsFieldRect.height();
QPainter painter( this );
// all attributes are determined in data(), we just paint the rects:
for ( int row = 0; row < rowCount() - 1; ++row ) {
for ( int column = 0; column < columnCount(); ++column ) {
// get the rectangle of the field that will be drawn
QRect fieldRect;
const int y = row * FieldHeight;
if ( column == columnCount() - 1 ) { // totals column
fieldRect = QRect( width() - m_cachedTotalsFieldRect.width(), y,
m_cachedTotalsFieldRect.width(), FieldHeight );
} else if ( column == 0 ) { // task column
fieldRect = QRect( 0, y, taskColumnWidth(), FieldHeight );
} else if ( column > 0 ) { // a task
fieldRect = QRect( width() - m_cachedTotalsFieldRect.width()
- 8 * m_cachedDayFieldRect.width()
+ column * m_cachedDayFieldRect.width(), y,
m_cachedDayFieldRect.width(), FieldHeight );
}
// paint the field, if it is in the dirty region
if( e->rect().contains( fieldRect ) ) {
DataField field = m_defaultField;
data( field, column, row );
int alignment = Qt::AlignRight | Qt::AlignVCenter;
if ( row == 0 ) {
alignment = Qt::AlignCenter | Qt::AlignVCenter;
} else if ( column == 0 && row < rowCount() - 1 ) {
alignment = Qt::AlignLeft | Qt::AlignVCenter;
}
if( column == 0 ) { // task column
field.text = elidedText( field.text, field.font, fieldRect.width() - 2*Margin );
}
if ( field.storeAsActive ) m_activeFieldRects << fieldRect;
const QRect textRect = fieldRect.adjusted( Margin, Margin, -Margin, -Margin );
if ( field.hasHighlight ) {
painter.setBrush( field.highlight );
painter.setPen( Qt::NoPen );
painter.drawRect( fieldRect );
} else {
painter.setBrush( field.background );
painter.setPen( Qt::NoPen );
painter.drawRect( fieldRect );
}
painter.setPen( palette().text().color() );
painter.setFont( field.font );
painter.drawText( textRect, alignment, field.text );
}
}
}
// paint the tracking row
const int top = ( rowCount() - 1 ) * FieldHeight;
const QRect fieldRect( 0, top, width(), height() - top );
if ( e->rect().contains( fieldRect ) ) {
DataField field = m_defaultField;
data( field, 0, rowCount() - 1 );
painter.setBrush( field.background );
painter.setPen( Qt::NoPen );
painter.drawRect( fieldRect );
}
}
示例8: paintEvent
void ModeTabBar::paintEvent(QPaintEvent *event)
{
QPainter p(this);
IconManager *iconManager = IconManager::instance();
QLinearGradient bgGrad(rect().topLeft(), rect().topRight());
bgGrad.setColorAt(0.5, palette().color(QPalette::Window));
bgGrad.setColorAt(1.0, palette().color(QPalette::Midlight));
p.fillRect(rect(), bgGrad);
p.setPen(palette().color(QPalette::Shadow));
p.drawLine(width() - 1, 0, width() - 1, height());
for(int i = 0; i < count(); ++i) {
p.save();
QFont labelFont = font();
labelFont.setBold(true);
p.setFont(labelFont);
QRect rect = tabRect(i);
int textHeight = p.fontMetrics().boundingRect(QRect(0, 0, width(), height()), 0, tabLabel(i)).height();
QRect labelRect(QPoint(rect.left() + tabPadding, rect.bottom() - textHeight - tabPadding), QSize(rect.width() - (tabPadding * 2), textHeight));
int iconSize = rect.height() - textHeight - (3 * tabPadding);
QRect iconRect(QPoint((rect.width() - iconSize) / 2, rect.top() + tabPadding), QSize(iconSize, iconSize));
bool isSelected = (i == m_currentIndex);
bool isEnabled = isTabEnabled(i);
bool isHovered = (i == m_hoverIndex);
if(isHovered && isEnabled) {
p.fillRect(rect.adjusted(0, 0, -1, 0), QColor(0, 0, 0, 24));
}
if(isSelected) {
p.save();
p.setPen(palette().color(QPalette::Shadow));
p.drawLine(rect.topLeft(), rect.topRight());
p.drawLine(rect.bottomLeft(), rect.bottomRight());
p.fillRect(rect.adjusted(0, 0, -1, 0), QColor(0, 0, 0, 32));
p.translate(rect.width() - 6, rect.top() + (rect.height() / 2) - 12);
QPolygon arrowPoly;
arrowPoly.append(QPoint(7, 0));
arrowPoly.append(QPoint(7, 24));
arrowPoly.append(QPoint(0, 12));
p.translate(0, 1);
p.setBrush(palette().color(QPalette::Shadow));
p.setPen(palette().color(QPalette::Shadow));
p.setRenderHint(QPainter::Antialiasing);
p.drawPolygon(arrowPoly);
p.translate(0, -1);
p.setBrush(palette().color(QPalette::Light));
p.drawPolygon(arrowPoly);
p.restore();
}
if(!isEnabled)
p.setOpacity(0.6);
QIcon icon(iconManager->icon(tabIcon(i)));
QPixmap pixmap = icon.pixmap(iconSize, iconSize, isEnabled ? QIcon::Normal : QIcon::Disabled);
p.drawPixmap(iconRect, pixmap);
p.setPen(palette().color(QPalette::Text));
p.drawText(labelRect, Qt::AlignCenter, tabLabel(i));
p.restore();
}
}
示例9: drawMultiLineListWidgetItem
void CWizNoteStyle::drawMultiLineListWidgetItem(const QStyleOptionViewItemV4 *vopt, QPainter *p, const CWizMultiLineListWidget *view) const
{
bool imageAlignLeft = view->imageAlignLeft();
int imageWidth = view->imageWidth();
int lineCount = view->lineCount();
int wrapTextLineText = view->wrapTextLineIndex();
const QPixmap img = view->itemImage(vopt->index);
p->save();
p->setClipRect(vopt->rect);
QRect textLine = vopt->rect;
textLine.adjust(4, 0, -4, 0);
p->setPen(Utils::StyleHelper::listViewItemSeperator());
p->drawLine(textLine.bottomLeft(), textLine.bottomRight());
QRect textRect = vopt->rect;
//QRect textRect = subElementRect(SE_ItemViewItemText, vopt, view);
// draw the background
drawMultiLineItemBackground(vopt, p, view);
if (!img.isNull() && img.width() > 0 && img.height() > 0)
{
QRect imageRect = textRect;
if (imageAlignLeft)
{
imageRect.setRight(imageRect.left() + imageWidth + 16);
imageRect.adjust(4, 4, -4, -4);
textRect.setLeft(imageRect.right());
}
else
{
imageRect.setLeft(imageRect.right() - imageWidth + 16);
imageRect.adjust(4, 4, -4, -4);
textRect.setRight(imageRect.left());
}
if (img.width() > imageRect.width() || img.height() > imageRect.height())
{
double fRate = std::min<double>(double(imageRect.width()) / img.width(), double(imageRect.height()) / img.height());
int newWidth = int(img.width() * fRate);
int newHeight = int(img.height() * fRate);
//
int adjustX = (imageRect.width() - newWidth) / 2;
int adjustY = (imageRect.height() - newHeight) / 2;
imageRect.adjust(adjustX, adjustY, -adjustX, -adjustY);
}
else
{
int adjustX = (imageRect.width() - img.width()) / 2;
int adjustY = (imageRect.height() - img.height()) / 2;
imageRect.adjust(adjustX, adjustY, -adjustX, -adjustY);
}
p->drawPixmap(imageRect, img);
}
// draw the text
QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled
? QPalette::Normal : QPalette::Disabled;
if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active))
cg = QPalette::Inactive;
if (vopt->state & QStyle::State_Selected) {
p->setPen(vopt->palette.color(cg, QPalette::HighlightedText));
} else {
p->setPen(vopt->palette.color(cg, QPalette::Text));
}
if (vopt->state & QStyle::State_Editing) {
p->setPen(vopt->palette.color(cg, QPalette::Text));
p->drawRect(textRect.adjusted(0, 0, -1, -1));
}
textRect.adjust(8, 8, -8, -8);
bool selected = vopt->state.testFlag(State_Selected);
int lineHeight = vopt->fontMetrics.height() + 2;
for (int line = 0; line < wrapTextLineText && line < lineCount; line++)
{
QColor color = (0 == line) ? Utils::StyleHelper::listViewMultiLineFirstLine(selected)
: Utils::StyleHelper::listViewMultiLineOtherLine(selected);
//
CString strText = view->itemText(vopt->index, line);
color = view->itemTextColor(vopt->index, line, selected, color);
QRect rc = textRect;
rc.setTop(rc.top() + line * lineHeight);
rc.setHeight(lineHeight);
::WizDrawTextSingleLine(p, rc, strText, Qt::TextSingleLine | Qt::AlignVCenter, color, true);
}
int line = wrapTextLineText;
if (line < lineCount)
{
CString strText = view->itemText(vopt->index, line);
for (; line < lineCount; line++)
{
QColor color = Utils::StyleHelper::listViewMultiLineOtherLine(selected);
//
color = view->itemTextColor(vopt->index, line, selected, color);
QRect rc = textRect;
//.........这里部分代码省略.........
示例10: arrowRect
void
PlaylistItemDelegate::paintDetailed( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
TrackModelItem* item = m_model->itemFromIndex( m_model->mapToSource( index ) );
Q_ASSERT( item );
QStyleOptionViewItemV4 opt = option;
prepareStyleOption( &opt, index, item );
opt.text.clear();
qApp->style()->drawControl( QStyle::CE_ItemViewItem, &opt, painter );
if ( m_view->hoveredIndex().row() == index.row() && m_view->hoveredIndex().column() == index.column() &&
( index.column() == TrackModel::Artist || index.column() == TrackModel::Album ) )
{
opt.rect.setWidth( opt.rect.width() - 16 );
QRect arrowRect( opt.rect.x() + opt.rect.width(), opt.rect.y() + 1, opt.rect.height() - 2, opt.rect.height() - 2 );
if ( m_arrowIcon.height() != arrowRect.height() )
m_arrowIcon = m_arrowIcon.scaled( arrowRect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation );
painter->drawPixmap( arrowRect, m_arrowIcon );
}
painter->save();
if ( index.column() == TrackModel::Score )
{
QColor barColor( 167, 183, 211 ); // This matches the sidebar (sourcetreeview.cpp:672)
if ( opt.state & QStyle::State_Selected )
painter->setPen( opt.palette.brightText().color() );
else
painter->setPen( barColor );
QRect r = opt.rect.adjusted( 3, 3, -6, -4 );
painter->drawRect( r );
QRect fillR = r;
int fillerWidth = (int)( index.data().toFloat() * (float)fillR.width() );
fillR.adjust( 0, 0, -( fillR.width() - fillerWidth ), 0 );
if ( opt.state & QStyle::State_Selected )
painter->setBrush( opt.palette.brightText().color() );
else
painter->setBrush( barColor );
painter->drawRect( fillR );
}
else if ( item->isPlaying() )
{
{
QRect r = opt.rect.adjusted( 3, 0, 0, 0 );
// Paint Now Playing Speaker Icon
if ( m_view->header()->visualIndex( index.column() ) == 0 )
{
r.adjust( 0, 0, 0, -3 );
painter->drawPixmap( r.adjusted( 3, 1, 18 - r.width(), 1 ), m_nowPlayingIcon );
r.adjust( 25, 0, 0, 3 );
}
painter->setPen( opt.palette.text().color() );
QString text = painter->fontMetrics().elidedText( index.data().toString(), Qt::ElideRight, r.width() - 3 );
painter->drawText( r.adjusted( 0, 1, 0, 0 ), text, m_centerOption );
}
}
else
{
painter->setPen( opt.palette.text().color() );
QString text = painter->fontMetrics().elidedText( index.data().toString(), Qt::ElideRight, opt.rect.width() - 3 );
painter->drawText( opt.rect.adjusted( 3, 1, 0, 0 ), text, m_centerOption );
}
painter->restore();
}
示例11: paintEvent
void ProgressBar::paintEvent(QPaintEvent *)
{
// TODO move font into Utils::StyleHelper
// TODO use Utils::StyleHelper white
double range = maximum() - minimum();
double percent = 0.;
if (!qFuzzyIsNull(range))
percent = qBound(0., (value() - minimum()) / range, 1.);
if (finished())
percent = 1;
QPainter p(this);
QFont fnt(titleFont());
p.setFont(fnt);
QFontMetrics fm(fnt);
int titleHeight = m_titleVisible ? fm.height() : 0;
// Draw separator
int separatorHeight = m_separatorVisible ? SEPARATOR_HEIGHT : 0;
if (m_separatorVisible) {
QRectF innerRect = QRectF(this->rect()).adjusted(0.5, 0.5, -0.5, -0.5);
p.setPen(StyleHelper::sidebarShadow());
p.drawLine(innerRect.topLeft(), innerRect.topRight());
if (creatorTheme()->flag(Theme::DrawToolBarHighlights)) {
p.setPen(StyleHelper::sidebarHighlight());
p.drawLine(innerRect.topLeft() + QPointF(1, 1), innerRect.topRight() + QPointF(0, 1));
}
}
if (m_titleVisible) {
QRect textBounds = fm.boundingRect(m_title);
textBounds.moveCenter(rect().center());
int alignment = Qt::AlignHCenter;
int textSpace = rect().width() - 8;
// If there is not enough room when centered, we left align and
// elide the text
QString elidedtitle = fm.elidedText(m_title, Qt::ElideRight, textSpace);
QRect textRect = rect().adjusted(3, separatorHeight - 1, -3, 0);
textRect.setHeight(titleHeight+5);
p.setPen(QColor(0, 0, 0, 120));
p.drawText(textRect, alignment | Qt::AlignBottom, elidedtitle);
p.translate(0, -1);
p.setPen(creatorTheme()->color(Theme::ProgressBarTitleColor));
p.drawText(textRect, alignment | Qt::AlignBottom, elidedtitle);
p.translate(0, 1);
}
m_progressHeight = PROGRESSBAR_HEIGHT;
m_progressHeight += ((m_progressHeight % 2) + 1) % 2; // make odd
// draw outer rect
const QRect rect(INDENT - 1, titleHeight + separatorHeight + (m_titleVisible ? 5 : 4),
size().width() - 2 * INDENT + 1, m_progressHeight);
QRectF inner = rect.adjusted(2, 2, -2, -2);
inner.adjust(0, 0, qRound((percent - 1) * inner.width()), 0);
// Show at least a hint of progress. Non-flat needs more pixels due to the borders.
inner.setWidth(qMax(qMin(3.0, qreal(rect.width())), inner.width()));
Theme::Color themeColor = Theme::ProgressBarColorNormal;
if (m_error)
themeColor = Theme::ProgressBarColorError;
else if (m_finished)
themeColor = Theme::ProgressBarColorFinished;
const QColor c = creatorTheme()->color(themeColor);
//draw the progress bar
if (creatorTheme()->flag(Theme::FlatToolBars)) {
p.fillRect(rect.adjusted(2, 2, -2, -2),
creatorTheme()->color(Theme::ProgressBarBackgroundColor));
p.fillRect(inner, c);
} else {
const static QImage bar(StyleHelper::dpiSpecificImageFile(
QLatin1String(":/core/images/progressbar.png")));
StyleHelper::drawCornerImage(bar, &p, rect, 3, 3, 3, 3);
// Draw line and shadow after the gradient fill
if (value() > 0 && value() < maximum()) {
p.fillRect(QRect(inner.right(), inner.top(), 2, inner.height()), QColor(0, 0, 0, 20));
p.fillRect(QRect(inner.right(), inner.top(), 1, inner.height()), QColor(0, 0, 0, 60));
}
QLinearGradient grad(inner.topLeft(), inner.bottomLeft());
grad.setColorAt(0, c.lighter(130));
grad.setColorAt(0.4, c.lighter(106));
grad.setColorAt(0.41, c.darker(106));
grad.setColorAt(1, c.darker(130));
p.setPen(Qt::NoPen);
p.setBrush(grad);
p.drawRect(inner);
p.setBrush(Qt::NoBrush);
p.setPen(QPen(QColor(0, 0, 0, 30), 1));
//.........这里部分代码省略.........
示例12: if
void
PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index, bool useAvatars ) const
{
TrackModelItem* item = m_model->itemFromIndex( m_model->mapToSource( index ) );
Q_ASSERT( item );
QStyleOptionViewItemV4 opt = option;
prepareStyleOption( &opt, index, item );
opt.text.clear();
qApp->style()->drawControl( QStyle::CE_ItemViewItem, &opt, painter );
if ( m_view->header()->visualIndex( index.column() ) > 0 )
return;
QPixmap pixmap;
QString artist, track, upperText, lowerText;
source_ptr source = item->query()->playedBy().first;
if ( item->query()->results().count() )
{
artist = item->query()->results().first()->artist()->name();
track = item->query()->results().first()->track();
}
else
{
artist = item->query()->artist();
track = item->query()->track();
}
if ( source.isNull() )
{
upperText = artist;
lowerText = track;
}
else
{
upperText = QString( "%1 - %2" ).arg( artist ).arg( track );
QString playtime = TomahawkUtils::ageToString( QDateTime::fromTime_t( item->query()->playedBy().second ) );
if ( source == SourceList::instance()->getLocal() )
lowerText = QString( "played %1 ago by you" ).arg( playtime );
else
lowerText = QString( "played %1 ago by %2" ).arg( playtime ).arg( source->friendlyName() );
if ( useAvatars )
pixmap = source->avatar( Source::FancyStyle );
}
if ( pixmap.isNull() && !useAvatars )
pixmap = QPixmap( RESPATH "images/track-placeholder.png" );
else if ( pixmap.isNull() && useAvatars )
pixmap = m_defaultAvatar;
painter->save();
{
QRect r = opt.rect.adjusted( 3, 6, 0, -6 );
// Paint Now Playing Speaker Icon
if ( item->isPlaying() )
{
r.adjust( 0, 0, 0, 0 );
QRect npr = r.adjusted( 3, r.height() / 2 - m_nowPlayingIcon.height() / 2, 18 - r.width(), -r.height() / 2 + m_nowPlayingIcon.height() / 2 );
painter->drawPixmap( npr, m_nowPlayingIcon );
r.adjust( 22, 0, 0, 0 );
}
painter->setPen( opt.palette.text().color() );
QRect ir = r.adjusted( 4, 0, -option.rect.width() + option.rect.height() - 8 + r.left(), 0 );
QPixmap scover;
if ( m_cache.contains( pixmap.cacheKey() ) )
{
scover = m_cache.value( pixmap.cacheKey() );
}
else
{
scover = pixmap.scaled( ir.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation );
m_cache.insert( pixmap.cacheKey(), scover );
}
painter->drawPixmap( ir, scover );
QFont boldFont = opt.font;
boldFont.setBold( true );
r.adjust( ir.width() + 12, 0, -12, 0 );
painter->setFont( boldFont );
QString text = painter->fontMetrics().elidedText( upperText, Qt::ElideRight, r.width() );
painter->drawText( r.adjusted( 0, 1, 0, 0 ), text, m_topOption );
painter->setFont( opt.font);
text = painter->fontMetrics().elidedText( lowerText, Qt::ElideRight, r.width() );
painter->drawText( r.adjusted( 0, 1, 0, 0 ), text, m_bottomOption );
}
painter->restore();
}
示例13: init
void SymbolBox::init(bool showNoSymbol) {
QPixmap icon = QPixmap(15, 15);
QColor c = QColor(Qt::gray);
icon.fill(c);
const QRect r = QRect(1, 1, 14, 14);
QPainter p(&icon);
p.setRenderHint(QPainter::Antialiasing);
QwtSymbol symb;
p.setBrush(QBrush(QColor(Qt::white)));
if (showNoSymbol)
this->addItem(tr("No Symbol"));
symb.setStyle(QwtSymbol::Ellipse);
symb.draw(&p, r);
this->addItem(icon, tr("Ellipse"));
symb.setStyle(QwtSymbol::Rect);
icon.fill(c);
symb.draw(&p, r.adjusted(0, 0, -1, -1));
this->addItem(icon, tr("Rectangle"));
symb.setStyle(QwtSymbol::Diamond);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Diamond"));
symb.setStyle(QwtSymbol::Triangle);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Triangle"));
symb.setStyle(QwtSymbol::DTriangle);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Down Triangle"));
symb.setStyle(QwtSymbol::UTriangle);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Up Triangle"));
symb.setStyle(QwtSymbol::LTriangle);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Left Triangle"));
symb.setStyle(QwtSymbol::RTriangle);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Right Triangle"));
symb.setStyle(QwtSymbol::Cross);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Cross"));
symb.setStyle(QwtSymbol::XCross);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Diagonal Cross"));
symb.setStyle(QwtSymbol::HLine);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Horizontal Line"));
symb.setStyle(QwtSymbol::VLine);
p.eraseRect(r);
symb.draw(&p, r);
this->addItem(icon, tr("Vertical Line"));
symb.setStyle(QwtSymbol::Star1);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Star 1"));
symb.setStyle(QwtSymbol::Star2);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Star 2"));
symb.setStyle(QwtSymbol::Hexagon);
icon.fill(c);
symb.draw(&p, r);
this->addItem(icon, tr("Hexagon"));
p.end();
}
示例14: growRectFromRadius
QRect growRectFromRadius(const QRect &rc, int radius)
{
int halfSize = KisGaussianKernel::kernelSizeFromRadius(radius) / 2;
return rc.adjusted(-halfSize, -halfSize, halfSize, halfSize);
}
示例15: paintEvent
void SliderCustom::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
//滑动块半径
const int ellipseR = 5;
//绘制底色框
const int offsetY = size().height() / 2 - 2;
QRect rect = this->rect();
QRect sliderRect = rect.adjusted(ellipseR, offsetY, -ellipseR, -offsetY);
painter.fillRect(sliderRect, Qt::gray);
//滑块数据
const double k = ((double)(value() - minimum())) / (maximum() - minimum());
int xEllipse = (int)(sliderRect.width() * k) + ellipseR;
//避免滑块绘制超出边界
if (xEllipse + ellipseR > rect.width())
{
xEllipse -= 1;
}
//音量弹簧
int scaledMag = int(( double)sliderRect.width() * mag + ellipseR);
int scaledPeak = int(( double)sliderRect.width() * peak + ellipseR);
//确保scaledMag、scaledPeak不超过滑块的点位
scaledMag = scaledMag > xEllipse - ellipseR ? xEllipse - ellipseR : scaledMag;
scaledPeak = scaledPeak > xEllipse - ellipseR ? xEllipse - ellipseR : scaledPeak;
scaledMag = scaledMag < ellipseR ? ellipseR : scaledMag;
scaledPeak = scaledPeak < ellipseR ? ellipseR : scaledPeak;
QLinearGradient gradient;
gradient.setStart(qreal(scaledMag), 0);
gradient.setFinalStop(qreal(scaledPeak), 0);
gradient.setColorAt(0, magColor);
gradient.setColorAt(1, peakColor);
// RMS
painter.fillRect(sliderRect.x(), sliderRect.y(),
scaledMag, sliderRect.height(),
magColor);
// RMS - Peak gradient
painter.fillRect(scaledMag, sliderRect.y(),
scaledPeak - scaledMag + 1, sliderRect.height(),
QBrush(gradient));
// Background
painter.fillRect(scaledPeak, sliderRect.y(),
sliderRect.width() - scaledPeak, sliderRect.height(),
Qt::gray);
//最后抗锯齿绘制滑块,抗锯齿会影响性能
painter.setRenderHint(QPainter::Antialiasing, true);
QPoint tickCenter(xEllipse, size().height() / 2);
const QBrush oldBrush = painter.brush();
const QPen oldPen = painter.pen();
painter.setBrush(Qt::lightGray);
painter.setPen(Qt::lightGray);
painter.drawEllipse(tickCenter, ellipseR, ellipseR);
painter.setBrush(oldBrush);
painter.setPen(oldPen);
painter.setRenderHint(QPainter::Antialiasing, false);
}