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

📄 qstylesheetstyle.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    { QStyle::SC_None, "icon" },    { QStyle::SC_None, "right-arrow" },    { QStyle::SC_None, "branch" },    { QStyle::SC_None, "section" },    { QStyle::SC_None, "down-arrow" },    { QStyle::SC_None, "up-arrow" },    { QStyle::SC_None, "chunk" },    { QStyle::SC_None, "tab" },    { QStyle::SC_None, "scroller" },    { QStyle::SC_None, "tear" },    { QStyle::SC_SliderGroove, "groove" },    { QStyle::SC_SliderHandle, "handle" },    { QStyle::SC_None, "add-page" },    { QStyle::SC_None, "sub-page"},    { QStyle::SC_SliderTickmarks, "tick-mark" },    { QStyle::SC_None, "pane" },    { QStyle::SC_None, "tab-bar" },    { QStyle::SC_None, "left-corner" },    { QStyle::SC_None, "right-corner" }};QVector<Declaration> declarations(const QVector<StyleRule> &styleRules, const QString &part, int pseudoClass = PseudoClass_Unspecified){    QVector<Declaration> decls;    for (int i = 0; i < styleRules.count(); i++) {        const Selector& selector = styleRules.at(i).selectors.at(0);        // Rules with pseudo elements don't cascade. This is an intentional        // diversion for CSS        if (part.compare(selector.pseudoElement(), Qt::CaseInsensitive) != 0)            continue;        int negated = 0;        int cssClass = selector.pseudoClass(&negated);        if ((cssClass == PseudoClass_Unspecified)            || ((((cssClass & pseudoClass) == cssClass)) && ((negated & pseudoClass) == 0)))            decls += styleRules.at(i).declarations;    }    return decls;}int QStyleSheetStyle::nativeFrameWidth(const QWidget *w){    QStyle *base = baseStyle();#ifndef QT_NO_SPINBOX    if (qobject_cast<const QAbstractSpinBox *>(w))        return base->pixelMetric(QStyle::PM_SpinBoxFrameWidth, 0, w);#endif#ifndef QT_NO_COMBOBOX    if (qobject_cast<const QComboBox *>(w))        return base->pixelMetric(QStyle::PM_ComboBoxFrameWidth, 0, w);#endif#ifndef QT_NO_MENU    if (qobject_cast<const QMenu *>(w))        return base->pixelMetric(QStyle::PM_MenuPanelWidth, 0, w);#endif#ifndef QT_NO_MENUBAR    if (qobject_cast<const QMenuBar *>(w))        return base->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, w);#endif    if (QString::fromLatin1(w->metaObject()->className()) == QLatin1String("QTipLabel"))        return base->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, w);    return base->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, w);}static int pseudoClass(QStyle::State state){    int pc = (state & QStyle::State_Enabled)             ? PseudoClass_Enabled : PseudoClass_Disabled;    if (state & QStyle::State_Sunken)        pc |= PseudoClass_Pressed;    if (state & QStyle::State_MouseOver)        pc |= PseudoClass_Hover;    if (state & QStyle::State_HasFocus)        pc |= PseudoClass_Focus;    if (state & QStyle::State_On)        pc |= PseudoClass_On;    if (state & QStyle::State_Off)        pc |= PseudoClass_Off;    if (state & QStyle::State_NoChange)        pc |= PseudoClass_Indeterminate;    if (state & QStyle::State_Selected)        pc |= PseudoClass_Selected;    if (state & QStyle::State_Horizontal)        pc |= PseudoClass_Horizontal;    else        pc |= PseudoClass_Vertical;    if (state & (QStyle::State_Open | QStyle::State_On | QStyle::State_Sunken))        pc |= PseudoClass_Open;    else        pc |= PseudoClass_Closed;    if (state & QStyle::State_Children)        pc |= PseudoClass_Children;    if (state & QStyle::State_Sibling)        pc |= PseudoClass_Sibling;    if (state & QStyle::State_ReadOnly)        pc |= PseudoClass_ReadOnly;    if (state & QStyle::State_Item)        pc |= PseudoClass_Item;    return pc;}QRenderRule QStyleSheetStyle::renderRule(const QWidget *w, int element, int state) const{    if (!w)        return QRenderRule();    const QString part = QLatin1String(knownPseudoElements[element].name);    if (renderRulesCache->contains(w)) {        QHash<int, QRenderRule> &renderRules = (*renderRulesCache)[w][part];        if (renderRules.contains(state))            return renderRules[state]; // already computed before    }    QVector<Declaration> decls = declarations(styleRules(w), part, state);    QRenderRule newRule(decls, w);    if (w->property("_q_stylesheet_polished").toBool() == true)        (*renderRulesCache)[w][part][state] = newRule;    return newRule;}QRenderRule QStyleSheetStyle::renderRule(const QWidget *w, const QStyleOption *opt, int pseudoElement) const{    if (!w)        return QRenderRule();    int extraClass = 0;    QStyle::State state = opt ? opt->state : QStyle::State(QStyle::State_None);    if (const QStyleOptionComplex *complex = qstyleoption_cast<const QStyleOptionComplex *>(opt)) {        if (pseudoElement != PseudoElement_None) {            // if not an active subcontrol, just pass enabled/disabled            QStyle::SubControl subControl = knownPseudoElements[pseudoElement].subControl;            if (!(complex->activeSubControls & subControl))                state = QStyle::State(state & (QStyle::State_Enabled | QStyle::State_Horizontal));        }        switch (pseudoElement) {        case PseudoElement_ComboBoxDropDown:        case PseudoElement_ComboBoxArrow:            state |= (complex->state & (QStyle::State_On|QStyle::State_ReadOnly));            break;        case PseudoElement_SpinBoxUpButton:        case PseudoElement_SpinBoxDownButton:        case PseudoElement_SpinBoxUpArrow:        case PseudoElement_SpinBoxDownArrow:#ifndef QT_NO_SPINBOX            if (const QStyleOptionSpinBox *sb = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {                bool on = false;                bool up = pseudoElement == PseudoElement_SpinBoxUpButton                          || pseudoElement == PseudoElement_SpinBoxUpArrow;                if ((sb->stepEnabled & QAbstractSpinBox::StepUpEnabled) && up)                    on = true;                else if ((sb->stepEnabled & QAbstractSpinBox::StepDownEnabled) && !up)                    on = true;                state |= (on ? QStyle::State_On : QStyle::State_Off);            }#endif // QT_NO_SPINBOX            break;        case PseudoElement_GroupBoxTitle:            state |= (complex->state & (QStyle::State_MouseOver | QStyle::State_Sunken));            break;        case PseudoElement_ToolButtonMenu:        case PseudoElement_ToolButtonMenuArrow:        case PseudoElement_ToolButtonDownArrow:            state |= complex->state & QStyle::State_MouseOver;            if (complex->state & QStyle::State_Sunken ||                complex->activeSubControls & QStyle::SC_ToolButtonMenu)                state |= QStyle::State_Sunken;            break;        case PseudoElement_SliderGroove:            state |= complex->state & QStyle::State_MouseOver;            break;        default:            break;        }        if (const QStyleOptionComboBox *combo = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {            // QStyle::State_On is set when the popup is being shown            // Propagate EditField Pressed state            if (pseudoElement == PseudoElement_None                && (complex->activeSubControls & QStyle::SC_ComboBoxEditField)                && (!(state & QStyle::State_MouseOver))) {                state |= QStyle::State_Sunken;            }            if (!combo->frame)                extraClass |= PseudoClass_Frameless;            if (!combo->editable)                extraClass |= PseudoClass_ReadOnly;            else                extraClass |= PseudoClass_Editable;#ifndef QT_NO_SPINBOX        } else if (const QStyleOptionSpinBox *spin = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {            if (!spin->frame)                extraClass |= PseudoClass_Frameless;#endif // QT_NO_SPINBOX        } else if (const QStyleOptionGroupBox *gb = qstyleoption_cast<const QStyleOptionGroupBox *>(opt)) {            if (gb->features & QStyleOptionFrameV2::Flat)                extraClass |= PseudoClass_Flat;            if (gb->lineWidth == 0)                extraClass |= PseudoClass_Frameless;        }    } else {        // handle simple style options        if (const QStyleOptionMenuItem *mi = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) {            if (mi->menuItemType == QStyleOptionMenuItem::DefaultItem)                extraClass |= PseudoClass_Default;            if (mi->checkType == QStyleOptionMenuItem::Exclusive)                extraClass |= PseudoClass_Exclusive;            else if (mi->checkType == QStyleOptionMenuItem::NonExclusive)                extraClass |= PseudoClass_NonExclusive;            if (mi->checkType != QStyleOptionMenuItem::NotCheckable)                extraClass |= (mi->checked) ? PseudoClass_Checked : PseudoClass_Unchecked;        } else if (const QStyleOptionHeader *hdr = qstyleoption_cast<const QStyleOptionHeader *>(opt)) {            if (hdr->position == QStyleOptionHeader::OnlyOneSection)                extraClass |= PseudoClass_OnlyOne;            else if (hdr->position == QStyleOptionHeader::Beginning)                extraClass |= PseudoClass_First;            else if (hdr->position == QStyleOptionHeader::End)                extraClass |= PseudoClass_Last;            else if (hdr->position == QStyleOptionHeader::Middle)                extraClass |= PseudoClass_Middle;            if (hdr->selectedPosition == QStyleOptionHeader::NextAndPreviousAreSelected)                extraClass |= (PseudoClass_NextSelected | PseudoClass_PreviousSelected);            else if (hdr->selectedPosition == QStyleOptionHeader::NextIsSelected)                extraClass |= PseudoClass_NextSelected;            else if (hdr->selectedPosition == QStyleOptionHeader::PreviousIsSelected)                extraClass |= PseudoClass_PreviousSelected;#ifndef QT_NO_TABWIDGET        } else if (const QStyleOptionTabWidgetFrame *tab = qstyleoption_cast<const QStyleOptionTabWidgetFrame *>(opt)) {            switch (tab->shape) {                case QTabBar::RoundedNorth:                case QTabBar::TriangularNorth:                    extraClass |= PseudoClass_Top;                    break;                case QTabBar::RoundedSouth:                case QTabBar::TriangularSouth:                    extraClass |= PseudoClass_Bottom;                    break;                case QTabBar::RoundedEast:                case QTabBar::TriangularEast:                    extraClass |= PseudoClass_Left;                    break;                case QTabBar::RoundedWest:                case QTabBar::TriangularWest:                    extraClass |= PseudoClass_Right;                    break;                default:                    break;            }#endif#ifndef QT_NO_TABBAR        } else if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(opt)) {            if (tab->position == QStyleOptionTab::OnlyOneTab)                extraClass |= PseudoClass_OnlyOne;            else if (tab->position == QStyleOptionTab::Beginning)                extraClass |= PseudoClass_First;            else if (tab->position == QStyleOptionTab::End)                extraClass |= PseudoClass_Last;            else if (tab->position == QStyleOptionTab::Middle)                extraClass |= PseudoClass_Middle;            if (tab->selectedPosition == QStyleOptionTab::NextIsSelected)                extraClass |= PseudoClass_NextSelected;            else if (tab->selectedPosition == QStyleOptionTab::PreviousIsSelected)                extraClass |= PseudoClass_PreviousSelected;            switch (tab->shape) {                case QTabBar::RoundedNorth:                case QTabBar::TriangularNorth:                    extraClass |= PseudoClass_Top;                    break;                case QTabBar::RoundedSouth:                case QTabBar::TriangularSouth:                    extraClass |= PseudoClass_Bottom;                    break;                case QTabBar::RoundedEast:                case QTabBar::TriangularEast:                    extraClass |= PseudoClass_Left;                    break;                case QTabBar::RoundedWest:                case QTabBar::TriangularWest:                    extraClass |= PseudoClass_Right;                    break;                default:                    break;            }#endif // QT_NO_TABBAR        } else if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) {            if (btn->features & QStyleOptionButton::Flat)                extraClass |= PseudoClass_Flat;            if (btn->features & QStyleOptionButton::DefaultButton)                extraClass |= PseudoClass_Default;        } else if (const QStyleOptionFrame *frm = qstyleoption_cast<const QStyleOptionFrame *>(opt)) {            if (frm->lineWidth == 0)                extraClass |= PseudoClass_Frameless;            if (const QStyleOptionFrameV2 *frame2 = qstyleoption_cast<const QStyleOptionFrameV2 *>(opt)) {                if (frame2->features & QStyleOptionFrameV2::Flat)                    extraClass |= PseudoClass_Flat;            }        }#ifndef QT_NO_TOOLBAR        else if (const QStyleOptionToolBar *tb = qstyleoption_cast<const QStyleOptionToolBar *>(opt)) {            if (tb->toolBarArea == Qt::LeftToolBarArea)                extraClass |= PseudoClass_Left;            else if (tb->toolBarArea == Qt::RightToolBarArea)                extraClass |= PseudoClass_Right;            else if (tb->toolBarArea == Qt::TopToolBarArea)                extraClass |= PseudoClass_Top;            else if (tb->toolBarArea == Qt::BottomToolBarArea)                extraClass |= PseudoClass_Bottom;            if (tb->positionWithinLine == QStyleOptionToolBar::Beginning)                extraClass |= PseudoClass_First;            else if (tb->positionWithinLine == QStyleOptionToolBar::Middle)                extraClass |= PseudoClass_Middle;            else if (tb->positionWithinLine == QStyleOptionToolBar::End)                extraClass |= PseudoClass_Last;            else if (tb->positionWithinLine == QStyleOptionToolBar::OnlyOne)                extraClass |= PseudoClass_OnlyOne;        }#endif // QT_NO_TOOLBAR#ifndef QT_NO_TOOLBOX        else if (const QStyleOptionToolBoxV2 *tab = qstyleoption_cast<const QStyleOptionToolBoxV2 *>(opt)) {            if (tab->position == QStyleOptionToolBoxV2::OnlyOneTab)                extraClass |= PseudoClass_OnlyOne;            else if (tab->position == QStyleOptionToolBoxV2::Beginning)                extraClass |= PseudoClass_First;            else if (tab->position == QStyleOptionToolBoxV2::End)                extraClass |= PseudoClass_Last;            else if (tab->position == QStyleOptionToolBoxV2::Middle)                extraClass |= PseudoClass_Middle;            if (tab->selectedPosition == QStyleOptionToolBoxV2::NextIsSelected)                extraClass |= PseudoClass_NextSelected;            else if (tab->selectedPosition == QStyleOptionToolBox

⌨️ 快捷键说明

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