182 Q_Q(QCommandLinkButton);
183 QPushButtonPrivate::init();
184 q->setAttribute(Qt::WA_Hover);
185 q->setAttribute(Qt::WA_MacShowFocusRect,
false);
187 QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Preferred, QSizePolicy::PushButton);
188 policy.setHeightForWidth(
true);
189 q->setSizePolicy(policy);
191 q->setIconSize(QSize(20, 20));
193 q->initStyleOption(&opt);
194 q->setIcon(q->style()->standardIcon(QStyle::SP_CommandLink, &opt, q));
203 qreal descriptionheight = 0;
204 if (!description.isEmpty()) {
206 layout.setFont(descriptionFont());
207 layout.beginLayout();
209 QTextLine line = layout.createLine();
212 line.setLineWidth(lineWidth);
213 line.setPosition(QPointF(0, descriptionheight));
214 descriptionheight += line.height();
218 return qCeil(descriptionheight);
300QSize QCommandLinkButton::sizeHint()
const
305 Q_D(
const QCommandLinkButton);
307 QSize size = QPushButton::sizeHint();
308 QFontMetrics fm(d->titleFont());
309 int textWidth = qMax(fm.horizontalAdvance(text()), 135);
310 int buttonWidth = textWidth + d->textOffset() + d->rightMargin();
311 int heightWithoutDescription = d->descriptionOffset() + d->bottomMargin();
313 size.setWidth(qMax(size.width(), buttonWidth));
314 size.setHeight(qMax(d->description.isEmpty() ? 41 : 60,
315 heightWithoutDescription + d->descriptionHeight(buttonWidth)));
331void QCommandLinkButton::paintEvent(QPaintEvent *)
333 Q_D(QCommandLinkButton);
334 QStylePainter p(
this);
336 QStyleOptionButton option;
337 initStyleOption(&option);
339 option.text = QString();
340 option.icon = QIcon();
342 const int vOffset = isDown()
343 ? style()->pixelMetric(QStyle::PM_ButtonShiftVertical, &option,
this) : 0;
344 const int hOffset = isDown()
345 ? style()->pixelMetric(QStyle::PM_ButtonShiftHorizontal, &option,
this) : 0;
348 p.drawControl(QStyle::CE_PushButton, option);
349 if (!icon().isNull()) {
350 const auto size = icon().actualSize(iconSize());
351 const auto mode = isEnabled() ? QIcon::Normal : QIcon::Disabled;
352 const auto state = isChecked() ? QIcon::On : QIcon::Off;
353 const auto rect = QRect(d->leftMargin() + hOffset, d->topMargin() + vOffset,
354 size.width(), size.height());
355 icon().paint(&p, rect, Qt::AlignCenter, mode, state);
359 QColor textColor = palette().buttonText().color();
360 if (isEnabled() && d->usingVistaStyle()) {
361 textColor = option.palette.buttonText().color();
362 if (underMouse() && !isDown())
363 textColor = option.palette.brightText().color();
365 d->currentColor = d->mergedColors(textColor, d->currentColor, 60);
366 option.palette.setColor(QPalette::ButtonText, d->currentColor);
369 int textflags = Qt::TextShowMnemonic;
370 if (!style()->styleHint(QStyle::SH_UnderlineShortcut, &option,
this))
371 textflags |= Qt::TextHideMnemonic;
373 p.setFont(d->titleFont());
374 p.drawItemText(d->titleRect().translated(hOffset, vOffset),
375 textflags, option.palette, isEnabled(), text(), QPalette::ButtonText);
378 textflags |= Qt::TextWordWrap | Qt::ElideRight;
379 p.setFont(d->descriptionFont());
380 p.drawItemText(d->descriptionRect().translated(hOffset, vOffset), textflags,
381 option.palette, isEnabled(), description(), QPalette::ButtonText);