184 Q_Q(QCommandLinkButton);
185 QPushButtonPrivate::init();
186 q->setAttribute(Qt::WA_Hover);
187 q->setAttribute(Qt::WA_MacShowFocusRect,
false);
189 QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Preferred, QSizePolicy::PushButton);
190 policy.setHeightForWidth(
true);
191 q->setSizePolicy(policy);
193 q->setIconSize(QSize(20, 20));
195 q->initStyleOption(&opt);
196 q->setIcon(q->style()->standardIcon(QStyle::SP_CommandLink, &opt, q));
205 qreal descriptionheight = 0;
206 if (!description.isEmpty()) {
208 layout.setFont(descriptionFont());
209 layout.beginLayout();
211 QTextLine line = layout.createLine();
214 line.setLineWidth(lineWidth);
215 line.setPosition(QPointF(0, descriptionheight));
216 descriptionheight += line.height();
220 return qCeil(descriptionheight);
307QSize QCommandLinkButton::sizeHint()
const
312 Q_D(
const QCommandLinkButton);
314 QSize size = QPushButton::sizeHint();
315 QFontMetrics fm(d->titleFont());
316 int textWidth = qMax(fm.horizontalAdvance(text()), 135);
317 int buttonWidth = textWidth + d->textOffset() + d->rightMargin();
318 int heightWithoutDescription = d->descriptionOffset() + d->bottomMargin();
320 size.setWidth(qMax(size.width(), buttonWidth));
321 size.setHeight(qMax(d->description.isEmpty() ? 41 : 60,
322 heightWithoutDescription + d->descriptionHeight(buttonWidth)));
338void QCommandLinkButton::paintEvent(QPaintEvent *)
340 Q_D(QCommandLinkButton);
341 QStylePainter p(
this);
343 QStyleOptionButton option;
344 initStyleOption(&option);
346 option.text = QString();
347 option.icon = QIcon();
349 const int vOffset = isDown()
350 ? style()->pixelMetric(QStyle::PM_ButtonShiftVertical, &option,
this) : 0;
351 const int hOffset = isDown()
352 ? style()->pixelMetric(QStyle::PM_ButtonShiftHorizontal, &option,
this) : 0;
355 p.drawControl(QStyle::CE_PushButton, option);
356 if (!icon().isNull()) {
357 const auto size = icon().actualSize(iconSize());
358 const auto mode = isEnabled() ? QIcon::Normal : QIcon::Disabled;
359 const auto state = isChecked() ? QIcon::On : QIcon::Off;
360 const auto rect = QRect(d->leftMargin() + hOffset, d->topMargin() + vOffset,
361 size.width(), size.height());
362 icon().paint(&p, rect, Qt::AlignCenter, mode, state);
366 QColor textColor = palette().buttonText().color();
367 if (isEnabled() && d->usingVistaStyle()) {
368 textColor = option.palette.buttonText().color();
369 if (underMouse() && !isDown())
370 textColor = option.palette.brightText().color();
372 d->currentColor = d->mergedColors(textColor, d->currentColor, 60);
373 option.palette.setColor(QPalette::ButtonText, d->currentColor);
376 int textflags = Qt::TextShowMnemonic;
377 if (!style()->styleHint(QStyle::SH_UnderlineShortcut, &option,
this))
378 textflags |= Qt::TextHideMnemonic;
380 p.setFont(d->titleFont());
381 p.drawItemText(d->titleRect().translated(hOffset, vOffset),
382 textflags, option.palette, isEnabled(), text(), QPalette::ButtonText);
385 textflags |= Qt::TextWordWrap | Qt::ElideRight;
386 p.setFont(d->descriptionFont());
387 p.drawItemText(d->descriptionRect().translated(hOffset, vOffset), textflags,
388 option.palette, isEnabled(), description(), QPalette::ButtonText);