⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwindowsvistastyle.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                    QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom())));                    painter->drawText(vShortcutRect, text_flags, s.mid(t + 1));                    s = s.left(t);                }                QFont font = menuitem->font;                if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem)                    font.setBold(true);                painter->setFont(font);                painter->setPen(discol);                painter->drawText(vTextRect, text_flags, s.left(t));                painter->restore();            }            if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow                int dim = (h - 2 * windowsItemFrame) / 2;                PrimitiveElement arrow;                arrow = (option->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight;                xpos = x + w - windowsArrowHMargin - windowsItemFrame - dim;                QRect  vSubMenuRect = visualRect(option->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim));                QStyleOptionMenuItem newMI = *menuitem;                newMI.rect = vSubMenuRect;                newMI.state = dis ? State_None : State_Enabled;                drawPrimitive(arrow, &newMI, painter, widget);            }        }        break;#endif // QT_NO_MENU    case CE_HeaderSection:        if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(option)) {            name = QLatin1String("HEADER");            partId = HP_HEADERITEM;            if (flags & State_Sunken)                stateId = HIS_PRESSED;            else if (flags & State_MouseOver)                stateId = HIS_HOT;            else                stateId = HIS_NORMAL;            if (header->sortIndicator != QStyleOptionHeader::None)                stateId += 3;            XPThemeData theme(widget, painter, name, partId, stateId, option->rect);            d->drawBackground(theme);        }        break;    case CE_MenuBarEmptyArea:        {            int stateId = MBI_NORMAL;            if (!(state & State_Enabled))                stateId = MBI_DISABLED;            XPThemeData theme(widget, painter, QLatin1String("MENU"), MENU_BARBACKGROUND, stateId, option->rect);            d->drawBackground(theme);        }        break;    case CE_ToolBar:        if (const QStyleOptionToolBar *toolbar = qstyleoption_cast<const QStyleOptionToolBar *>(option)) {            QPalette pal = option->palette;            pal.setColor(QPalette::Dark, option->palette.background().color().darker(130));            QStyleOptionToolBar copyOpt = *toolbar;            copyOpt.palette = pal;            QWindowsStyle::drawControl(element, &copyOpt, painter, widget);        }        break;    case CE_DockWidgetTitle:        if (const QDockWidget *dockWidget = qobject_cast<const QDockWidget *>(widget)) {            QRect rect = option->rect;            if (dockWidget->isFloating()) {                QWindowsXPStyle::drawControl(element, option, painter, widget);                break; //otherwise fall through            }            if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast<const QStyleOptionDockWidget *>(option)) {            const QStyleOptionDockWidgetV2 *v2                = qstyleoption_cast<const QStyleOptionDockWidgetV2*>(dwOpt);            bool verticalTitleBar = v2 == 0 ? false : v2->verticalTitleBar;            if (verticalTitleBar) {                QSize s = rect.size();                s.transpose();                rect.setSize(s);                painter->translate(rect.left() - 1, rect.top() + rect.width());                painter->rotate(-90);                painter->translate(-rect.left() + 1, -rect.top());            }            painter->setBrush(option->palette.background().color().darker(110));            painter->setPen(option->palette.background().color().darker(130));            painter->drawRect(rect.adjusted(0, 1, -1, -3));            int buttonMargin = 4;            int mw = pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget);            int fw = pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget);            const QDockWidget *dw = qobject_cast<const QDockWidget *>(widget);            bool isFloating = dw != 0 && dw->isFloating();            QRect r = option->rect.adjusted(0, 2, -1, -3);            QRect titleRect = r;            if (dwOpt->closable) {                QPixmap pm = standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt, widget).pixmap(10, 10);                titleRect.adjust(0, 0, -pm.size().width() - mw - buttonMargin, 0);            }            if (dwOpt->floatable) {                QPixmap pm = standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt, widget).pixmap(10, 10);                titleRect.adjust(0, 0, -pm.size().width() - mw - buttonMargin, 0);            }            if (isFloating) {                titleRect.adjust(0, -fw, 0, 0);                if (widget != 0 && widget->windowIcon().cacheKey() != qApp->windowIcon().cacheKey())                    titleRect.adjust(titleRect.height() + mw, 0, 0, 0);            } else {                titleRect.adjust(mw, 0, 0, 0);                if (!dwOpt->floatable && !dwOpt->closable)                    titleRect.adjust(0, 0, -mw, 0);            }            if (!verticalTitleBar)                titleRect = visualRect(dwOpt->direction, r, titleRect);            if (!dwOpt->title.isEmpty()) {                QString titleText = painter->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight,                                                                       verticalTitleBar ? titleRect.height() : titleRect.width());                const int indent = painter->fontMetrics().descent();                drawItemText(painter, rect.adjusted(indent + 1, 1, -indent - 1, -1),                                Qt::AlignLeft | Qt::AlignVCenter, dwOpt->palette,                                dwOpt->state & State_Enabled, titleText,                                QPalette::WindowText);                }            }            break;        }    default:        QWindowsXPStyle::drawControl(element, option, painter, widget);        break;    }}/*!  \reimp  see drawPrimitive for comments on the animation support */void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,                                         QPainter *painter, const QWidget *widget) const{    QWindowsVistaStylePrivate *d = const_cast<QWindowsVistaStylePrivate*>(d_func());    if (!QWindowsVistaStylePrivate::useVista()) {        QWindowsStyle::drawComplexControl(control, option, painter, widget);        return;    }    State state = option->state;    SubControls sub = option->subControls;    QRect r = option->rect;    int partId = 0;    int stateId = 0;    State flags = option->state;    if (widget && widget->testAttribute(Qt::WA_UnderMouse) && widget->isActiveWindow())        flags |= State_MouseOver;    if (d->transitionsEnabled() && widget) {        if ((qobject_cast<const QScrollBar *>(widget) && control == CC_ScrollBar)||            (qobject_cast<const QAbstractSpinBox*>(widget) && control == CC_SpinBox)    ||            (qobject_cast<const QComboBox*>(widget) && control == CC_ComboBox))        {            QWidget *w = const_cast<QWidget *> (widget);            int oldState = w->property("_q_stylestate").toInt();            int oldActiveControls = w->property("_q_stylecontrols").toInt();            QRect oldRect = w->property("_q_stylerect").toRect();            w->setProperty("_q_stylestate", (int)option->state);            w->setProperty("_q_stylecontrols", (int)option->activeSubControls);            w->setProperty("_q_stylerect", w->rect());            bool doTransition = ((state & State_Sunken)     != (oldState & State_Sunken)    ||                                 (state & State_On)         != (oldState & State_On)        ||                                 (state & State_MouseOver)  != (oldState & State_MouseOver) ||                                  oldActiveControls            != option->activeSubControls);            if (qstyleoption_cast<const QStyleOptionSlider *>(option)) {                QRect oldSliderPos = w->property("_q_stylesliderpos").toRect();                QRect currentPos = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget);                w->setProperty("_q_stylesliderpos", currentPos);                if (oldSliderPos != currentPos) {                    doTransition = false;                    d->stopAnimation(widget);                }            } else if (control == CC_SpinBox) {                //spinboxes have a transition when focus changes                if (!doTransition)                    doTransition = (state & State_HasFocus) != (oldState & State_HasFocus);            }            if (oldRect != option->rect) {                doTransition = false;                d->stopAnimation(widget);            }            if (doTransition) {                QImage startImage(option->rect.size(), QImage::Format_ARGB32_Premultiplied);                QImage endImage(option->rect.size(), QImage::Format_ARGB32_Premultiplied);                Animation *anim = d->widgetAnimation(widget);                Transition *t = new Transition;                t->setWidget(w);                if (!anim) {                    if (const QStyleOptionComboBox *combo = qstyleoption_cast<const QStyleOptionComboBox*>(option)) {                        //Combo boxes are special cased to avoid cleartype issues                        startImage.fill(0);                        QPainter startPainter(&startImage);                        QStyleOptionComboBox startCombo = *combo;                        startCombo.state = (QStyle::State)oldState;                        startCombo.activeSubControls = (QStyle::SubControl)oldActiveControls;                        drawComplexControl(control, &startCombo, &startPainter, 0 /* Intentional */);                        t->setStartImage(startImage);                    } else if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider*>(option)) {                        //This is a workaround for the direct3d engine as it currently has some issues with grabWindow                        startImage.fill(0);                        QPainter startPainter(&startImage);                        QStyleOptionSlider startSlider = *slider;                        startSlider.state = (QStyle::State)oldState;                        startSlider.activeSubControls = (QStyle::SubControl)oldActiveControls;                        drawComplexControl(control, &startSlider, &startPainter, 0 /* Intentional */);                        t->setStartImage(startImage);                    } else {                        t->setStartImage(QPixmap::grabWindow(widget->winId(), 0, 0 , option->rect.width(), option->rect.height()).toImage());                    }                } else {                    startImage.fill(0);                    QPainter startPainter(&startImage);                    anim->paint(&startPainter, option);                    t->setStartImage(startImage);                }                d->startAnimation(t);                endImage.fill(0);                QPainter endPainter(&endImage);                drawComplexControl(control, option, &endPainter, 0 /* Intentional */);                t->setEndImage(endImage);                t->setStartTime(QTime::currentTime());                if (option->state & State_MouseOver || option->state & State_Sunken)                    t->setDuration(150);                else                    t->setDuration(500);            }            if (Animation *anim = d->widgetAnimation(widget)) {                anim->paint(painter, option);                return;            }        }    }    switch (control) {    case CC_ComboBox:        if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(option))        {            if (cmb->editable) {                if (sub & SC_ComboBoxEditField) {                    partId = EP_EDITBORDER_NOSCROLL;                    if (!(flags & State_Enabled))                        stateId = ETS_DISABLED;                    else if (flags & State_MouseOver)                        stateId = ETS_HOT;                    else if (flags & State_HasFocus)                        stateId = ETS_FOCUSED;                    else                        stateId = ETS_NORMAL;                    XPThemeData theme(widget, painter, QLatin1String("EDIT"), partId, stateId, r);                    d->drawBackground(theme);                }                if (sub & SC_ComboBoxArrow) {                    QRect subRect = subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget);                    XPThemeData theme(widget, painter, QLatin1String("COMBOBOX"));                    theme.rect = subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget);                    partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBU

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -