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

📄 qworkspace.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qworkspace.h"#ifndef QT_NO_WORKSPACE#include "qapplication.h"#include "qbitmap.h"#include "qcursor.h"#include "qdatetime.h"#include "qdesktopwidget.h"#include "qevent.h"#include "qhash.h"#include "qicon.h"#include "qimage.h"#include "qlabel.h"#include "qlayout.h"#include "qmenubar.h"#include "qmenu.h"#include "qpainter.h"#include "qpointer.h"#include "qscrollbar.h"#include "qstyle.h"#include "qstyleoption.h"#include "qtooltip.h"#include "qdebug.h"#include <private/qwidget_p.h>#include <private/qwidgetresizehandler_p.h>#include <private/qlayoutengine_p.h>class QWorkspaceTitleBarPrivate;/*************************************************************** QMDIControl** Used for displaying MDI controls in a maximized MDI window**/class QMDIControl : public QWidget{    Q_OBJECTsignals:    void _q_minimize();    void _q_restore();    void _q_close();public:    QMDIControl(QWidget *widget);private:    QSize sizeHint() const;    void paintEvent(QPaintEvent *event);    void mousePressEvent(QMouseEvent *event);    void mouseReleaseEvent(QMouseEvent *event);    void mouseMoveEvent(QMouseEvent *event);    void leaveEvent(QEvent *event);    bool event(QEvent *event);    void initStyleOption(QStyleOptionComplex *option) const;    QStyle::SubControl activeControl; //control locked by pressing and holding the mouse    QStyle::SubControl hoverControl; //previously active hover control, used for tracking repaints};bool QMDIControl::event(QEvent *event){    if (event->type() == QEvent::ToolTip) {        QStyleOptionComplex opt;        initStyleOption(&opt);#ifndef QT_NO_TOOLTIP        QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);        QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt,                                                                 helpEvent->pos(), this);        if (ctrl == QStyle::SC_MdiCloseButton)            QToolTip::showText(helpEvent->globalPos(), QWorkspace::tr("Close"));        else if (ctrl == QStyle::SC_MdiMinButton)            QToolTip::showText(helpEvent->globalPos(), QWorkspace::tr("Minimize"));        else if (ctrl == QStyle::SC_MdiNormalButton)            QToolTip::showText(helpEvent->globalPos(), QWorkspace::tr("Restore Down"));        else            QToolTip::hideText();#endif // QT_NO_TOOLTIP    }    return QWidget::event(event);}void QMDIControl::initStyleOption(QStyleOptionComplex *option) const{    option->initFrom(this);    option->subControls = QStyle::SC_All;    option->activeSubControls = QStyle::SC_None;}QMDIControl::QMDIControl(QWidget *widget)    : QWidget(widget), activeControl(QStyle::SC_None),      hoverControl(QStyle::SC_None){    setObjectName(QLatin1String("qt_maxcontrols"));    setFocusPolicy(Qt::NoFocus);    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);    setMouseTracking(true);}QSize QMDIControl::sizeHint() const{    ensurePolished();    QStyleOptionComplex opt;    initStyleOption(&opt);    QSize size(48, 16);    return style()->sizeFromContents(QStyle::CT_MdiControls, &opt, size, this);}void QMDIControl::mousePressEvent(QMouseEvent *event){    if (event->button() != Qt::LeftButton) {        event->ignore();        return;    }    QStyleOptionComplex opt;    initStyleOption(&opt);    QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt,                                                             event->pos(), this);    activeControl = ctrl;    update();}void QMDIControl::mouseReleaseEvent(QMouseEvent *event){    if (event->button() != Qt::LeftButton) {        event->ignore();        return;    }    QStyleOptionTitleBar opt;    initStyleOption(&opt);    QStyle::SubControl under_mouse = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt,                                                                    event->pos(), this);    if (under_mouse == activeControl) {        switch (activeControl) {        case QStyle::SC_MdiCloseButton:            emit _q_close();            break;        case QStyle::SC_MdiNormalButton:            emit _q_restore();            break;        case QStyle::SC_MdiMinButton:            emit _q_minimize();            break;        default:            break;        }    }    activeControl = QStyle::SC_None;    update();}void QMDIControl::leaveEvent(QEvent * /*event*/){    hoverControl = QStyle::SC_None;    update();}void QMDIControl::mouseMoveEvent(QMouseEvent *event){    QStyleOptionTitleBar opt;    initStyleOption(&opt);    QStyle::SubControl under_mouse = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt,                                                                    event->pos(), this);    //test if hover state changes    if (hoverControl != under_mouse) {        hoverControl = under_mouse;        update();    }}void QMDIControl::paintEvent(QPaintEvent *){    QPainter p(this);    QStyleOptionComplex opt;    initStyleOption(&opt);    if (activeControl == hoverControl) {        opt.activeSubControls = activeControl;        opt.state |= QStyle::State_Sunken;    } else if (hoverControl != QStyle::SC_None && (activeControl == QStyle::SC_None)) {        opt.activeSubControls = hoverControl;        opt.state |= QStyle::State_MouseOver;    }    style()->drawComplexControl(QStyle::CC_MdiControls, &opt, &p, this);}class QWorkspaceTitleBar : public QWidget{    Q_OBJECT    Q_DECLARE_PRIVATE(QWorkspaceTitleBar)    Q_PROPERTY(bool autoRaise READ autoRaise WRITE setAutoRaise)    Q_PROPERTY(bool movable READ isMovable WRITE setMovable)public:    QWorkspaceTitleBar (QWidget *w, QWidget *parent, Qt::WindowFlags f = 0);    ~QWorkspaceTitleBar();    bool isActive() const;    bool usesActiveColor() const;    bool isMovable() const;    void setMovable(bool);    bool autoRaise() const;    void setAutoRaise(bool);    QWidget *window() const;    bool isTool() const;    QSize sizeHint() const;    void initStyleOption(QStyleOptionTitleBar *option) const;public slots:    void setActive(bool);signals:    void doActivate();    void doNormal();    void doClose();    void doMaximize();    void doMinimize();    void doShade();    void showOperationMenu();    void popupOperationMenu(const QPoint&);    void doubleClicked();protected:    bool event(QEvent *);    void contextMenuEvent(QContextMenuEvent *);    void mousePressEvent(QMouseEvent *);    void mouseDoubleClickEvent(QMouseEvent *);    void mouseReleaseEvent(QMouseEvent *);    void mouseMoveEvent(QMouseEvent *);    void enterEvent(QEvent *e);    void leaveEvent(QEvent *e);    void paintEvent(QPaintEvent *p);private:    Q_DISABLE_COPY(QWorkspaceTitleBar)};class QWorkspaceTitleBarPrivate : public QWidgetPrivate{    Q_DECLARE_PUBLIC(QWorkspaceTitleBar)public:    QWorkspaceTitleBarPrivate()        :        lastControl(QStyle::SC_None),#ifndef QT_NO_TOOLTIP        toolTip(0),#endif        act(0), window(0), movable(1), pressed(0), autoraise(0), moving(0)    {    }    Qt::WindowFlags flags;    QStyle::SubControl buttonDown;    QStyle::SubControl lastControl;    QPoint moveOffset;#ifndef QT_NO_TOOLTIP    QToolTip *toolTip;#endif    bool act                    :1;    QPointer<QWidget> window;    bool movable            :1;    bool pressed            :1;    bool autoraise          :1;    bool moving : 1;    int titleBarState() const;    void readColors();};inline int QWorkspaceTitleBarPrivate::titleBarState() const{    Q_Q(const QWorkspaceTitleBar);    uint state = window ? window->windowState() : static_cast<Qt::WindowStates>(Qt::WindowNoState);    state |= uint((act && q->isActiveWindow()) ? QStyle::State_Active : QStyle::State_None);    return (int)state;}void QWorkspaceTitleBar::initStyleOption(QStyleOptionTitleBar *option) const{    Q_D(const QWorkspaceTitleBar);    option->initFrom(this);    //################    if (d->window && (d->flags & Qt::WindowTitleHint)) {        option->text = d->window->windowTitle();        QIcon icon = d->window->windowIcon();        QSize s = icon.actualSize(QSize(64, 64));        option->icon = icon.pixmap(s);    }    option->subControls = QStyle::SC_All;    option->activeSubControls = QStyle::SC_None;    option->titleBarState = d->titleBarState();    option->titleBarFlags = d->flags;    option->state &= ~QStyle::State_MouseOver;}QWorkspaceTitleBar::QWorkspaceTitleBar(QWidget *w, QWidget *parent, Qt::WindowFlags f)    : QWidget(*new QWorkspaceTitleBarPrivate, parent, Qt::FramelessWindowHint){    Q_D(QWorkspaceTitleBar);    if (f == 0 && w)        f = w->windowFlags();    d->flags = f;    d->window = w;    d->buttonDown = QStyle::SC_None;    d->act = 0;    if (w) {        if (w->maximumSize() != QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX))            d->flags &= ~Qt::WindowMaximizeButtonHint;        setWindowTitle(w->windowTitle());    }    d->readColors();    setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));    setMouseTracking(true);    setAutoRaise(style()->styleHint(QStyle::SH_TitleBar_AutoRaise, 0, this));}QWorkspaceTitleBar::~QWorkspaceTitleBar(){}#ifdef Q_WS_WINstatic inline QRgb colorref2qrgb(COLORREF col){    return qRgb(GetRValue(col),GetGValue(col),GetBValue(col));}#endifvoid QWorkspaceTitleBarPrivate::readColors(){    Q_Q(QWorkspaceTitleBar);    QPalette pal = q->palette();    bool colorsInitialized = false;#ifdef Q_WS_WIN // ask system properties on windows#ifndef SPI_GETGRADIENTCAPTIONS#define SPI_GETGRADIENTCAPTIONS 0x1008#endif#ifndef COLOR_GRADIENTACTIVECAPTION#define COLOR_GRADIENTACTIVECAPTION 27#endif#ifndef COLOR_GRADIENTINACTIVECAPTION#define COLOR_GRADIENTINACTIVECAPTION 28#endif    if (QApplication::desktopSettingsAware()) {        pal.setColor(QPalette::Active, QPalette::Highlight, colorref2qrgb(GetSysColor(COLOR_ACTIVECAPTION)));        pal.setColor(QPalette::Inactive, QPalette::Highlight, colorref2qrgb(GetSysColor(COLOR_INACTIVECAPTION)));        pal.setColor(QPalette::Active, QPalette::HighlightedText, colorref2qrgb(GetSysColor(COLOR_CAPTIONTEXT)));        pal.setColor(QPalette::Inactive, QPalette::HighlightedText, colorref2qrgb(GetSysColor(COLOR_INACTIVECAPTIONTEXT)));        if (QSysInfo::WindowsVersion != QSysInfo::WV_95 && QSysInfo::WindowsVersion != QSysInfo::WV_NT) {            colorsInitialized = true;            BOOL gradient;            QT_WA({                SystemParametersInfo(SPI_GETGRADIENTCAPTIONS, 0, &gradient, 0);            } , {                SystemParametersInfoA(SPI_GETGRADIENTCAPTIONS, 0, &gradient, 0);            });            if (gradient) {                pal.setColor(QPalette::Active, QPalette::Base, colorref2qrgb(GetSysColor(COLOR_GRADIENTACTIVECAPTION)));                pal.setColor(QPalette::Inactive, QPalette::Base, colorref2qrgb(GetSysColor(COLOR_GRADIENTINACTIVECAPTION)));            } else {                pal.setColor(QPalette::Active, QPalette::Base, pal.color(QPalette::Active, QPalette::Highlight));                pal.setColor(QPalette::Inactive, QPalette::Base, pal.color(QPalette::Inactive, QPalette::Highlight));            }        }    }#endif // Q_WS_WIN    if (!colorsInitialized) {        pal.setColor(QPalette::Active, QPalette::Highlight,                      pal.color(QPalette::Active, QPalette::Highlight));        pal.setColor(QPalette::Active, QPalette::Base,                      pal.color(QPalette::Active, QPalette::Highlight));        pal.setColor(QPalette::Inactive, QPalette::Highlight,                      pal.color(QPalette::Inactive, QPalette::Dark));        pal.setColor(QPalette::Inactive, QPalette::Base,                      pal.color(QPalette::Inactive, QPalette::Dark));        pal.setColor(QPalette::Inactive, QPalette::HighlightedText,                      pal.color(QPalette::Inactive, QPalette::Window));    }    q->setPalette(pal);    q->setActive(act);}

⌨️ 快捷键说明

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