/*! Initialize \a option with the values from this QPushButton. This method is useful for subclasses when they need a QStyleOptionButton, but don't want to fill in all the information themselves. \sa QStyleOption::initFrom() */ void QPushButton::initStyleOption(QStyleOptionButton *option) const { if (!option) return; Q_D(const QPushButton); option->initFrom(this); option->features = QStyleOptionButton::None; if (d->flat) option->features |= QStyleOptionButton::Flat; #ifndef QT_NO_MENU if (d->menu) option->features |= QStyleOptionButton::HasMenu; #endif if (autoDefault()) option->features |= QStyleOptionButton::AutoDefaultButton; if (d->defaultButton) option->features |= QStyleOptionButton::DefaultButton; if (d->down || d->menuOpen) option->state |= QStyle::State_Sunken; if (d->checked) option->state |= QStyle::State_On; if (!d->flat && !d->down) option->state |= QStyle::State_Raised; option->text = d->text; option->icon = d->icon; option->iconSize = iconSize(); }
QStyleOptionButton OrientationButton::getStyleOption() const { QStyleOptionButton opt; opt.initFrom(this); if (orientation_ == Qt::Vertical) { QSize size = opt.rect.size(); size.transpose(); opt.rect.setSize(size); } opt.features = QStyleOptionButton::None; if (isFlat()) opt.features |= QStyleOptionButton::Flat; if (menu()) opt.features |= QStyleOptionButton::HasMenu; if (autoDefault() || isDefault()) opt.features |= QStyleOptionButton::AutoDefaultButton; if (isDefault()) opt.features |= QStyleOptionButton::DefaultButton; if (isDown() || (menu() && menu()->isVisible())) opt.state |= QStyle::State_Sunken; if (isChecked()) opt.state |= QStyle::State_On; if (!isFlat() && !isDown()) opt.state |= QStyle::State_Raised; opt.text = text(); opt.icon = icon(); opt.iconSize = iconSize(); return opt; }
/*! \reimp */ QSize QPushButton::sizeHint() const { Q_D(const QPushButton); if (d->sizeHint.isValid() && d->lastAutoDefault == autoDefault()) return d->sizeHint; d->lastAutoDefault = autoDefault(); ensurePolished(); int w = 0, h = 0; QStyleOptionButton opt; initStyleOption(&opt); // calculate contents size... #ifndef QT_NO_ICON bool showButtonBoxIcons = qobject_cast<QDialogButtonBox*>(parentWidget()) && style()->styleHint(QStyle::SH_DialogButtonBox_ButtonsHaveIcons); if (!icon().isNull() || showButtonBoxIcons) { int ih = opt.iconSize.height(); int iw = opt.iconSize.width() + 4; w += iw; h = qMax(h, ih); } #endif QString s(text()); bool empty = s.isEmpty(); if (empty) s = QString::fromLatin1("XXXX"); QFontMetrics fm = fontMetrics(); QSize sz = fm.size(Qt::TextShowMnemonic, s); if(!empty || !w) w += sz.width(); if(!empty || !h) h = qMax(h, sz.height()); opt.rect.setSize(QSize(w, h)); // PM_MenuButtonIndicator depends on the height #ifndef QT_NO_MENU if (menu()) w += style()->pixelMetric(QStyle::PM_MenuButtonIndicator, &opt, this); #endif d->sizeHint = (style()->sizeFromContents(QStyle::CT_PushButton, &opt, QSize(w, h), this). expandedTo(QApplication::globalStrut())); return d->sizeHint; }
/*! \reimp */ void QPushButton::focusInEvent(QFocusEvent *e) { Q_D(QPushButton); if (e->reason() != Qt::PopupFocusReason && autoDefault() && !d->defaultButton) { d->defaultButton = true; QDialog *dlg = qobject_cast<QDialog*>(window()); if (dlg) dlg->d_func()->setDefault(this); } QAbstractButton::focusInEvent(e); }
/*! \reimp */ void QPushButton::keyPressEvent(QKeyEvent *e) { Q_D(QPushButton); switch (e->key()) { case Qt::Key_Enter: case Qt::Key_Return: if (autoDefault() || d->defaultButton) { click(); break; } // fall through default: QAbstractButton::keyPressEvent(e); } }
/*! \reimp */ void QPushButton::focusOutEvent(QFocusEvent *e) { Q_D(QPushButton); if (e->reason() != Qt::PopupFocusReason && autoDefault() && d->defaultButton) { QDialog *dlg = qobject_cast<QDialog*>(window()); if (dlg) dlg->d_func()->setDefault(0); else d->defaultButton = false; } QAbstractButton::focusOutEvent(e); #ifndef QT_NO_MENU if (d->menu && d->menu->isVisible()) // restore pressed status setDown(true); #endif }
int QPushButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAbstractButton::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 2) qt_static_metacall(this, _c, _id, _a); _id -= 2; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< bool*>(_v) = autoDefault(); break; case 1: *reinterpret_cast< bool*>(_v) = isDefault(); break; case 2: *reinterpret_cast< bool*>(_v) = isFlat(); break; } _id -= 3; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setAutoDefault(*reinterpret_cast< bool*>(_v)); break; case 1: setDefault(*reinterpret_cast< bool*>(_v)); break; case 2: setFlat(*reinterpret_cast< bool*>(_v)); break; } _id -= 3; } else if (_c == QMetaObject::ResetProperty) { _id -= 3; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 3; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 3; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 3; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 3; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 3; } #endif // QT_NO_PROPERTIES return _id; }
task autonomous() //autonomous code { autoDefault(); }