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

📄 qworkspace.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void QWorkspaceTitleBar::mousePressEvent(QMouseEvent *e){    Q_D(QWorkspaceTitleBar);    if (!d->act)        emit doActivate();    if (e->button() == Qt::LeftButton) {        if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, 0)            && !rect().adjusted(5, 5, -5, 0).contains(e->pos())) {            // propagate border events to the QWidgetResizeHandler            e->ignore();            return;        }        d->pressed = true;        QStyleOptionTitleBar opt;        initStyleOption(&opt);        QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt,                                                                 e->pos(), this);        switch (ctrl) {        case QStyle::SC_TitleBarSysMenu:            if (d->flags & Qt::WindowSystemMenuHint) {                d->buttonDown = QStyle::SC_None;                static QTime *t = 0;                static QWorkspaceTitleBar *tc = 0;                if (!t)                    t = new QTime;                if (tc != this || t->elapsed() > QApplication::doubleClickInterval()) {                    emit showOperationMenu();                    t->start();                    tc = this;                } else {                    tc = 0;                    emit doClose();                    return;                }            }            break;        case QStyle::SC_TitleBarShadeButton:        case QStyle::SC_TitleBarUnshadeButton:            if (d->flags & Qt::WindowShadeButtonHint)                d->buttonDown = ctrl;            break;        case QStyle::SC_TitleBarNormalButton:                d->buttonDown = ctrl;            break;        case QStyle::SC_TitleBarMinButton:            if (d->flags & Qt::WindowMinimizeButtonHint)                d->buttonDown = ctrl;            break;        case QStyle::SC_TitleBarMaxButton:            if (d->flags & Qt::WindowMaximizeButtonHint)                d->buttonDown = ctrl;            break;        case QStyle::SC_TitleBarCloseButton:            if (d->flags & Qt::WindowSystemMenuHint)                d->buttonDown = ctrl;            break;        case QStyle::SC_TitleBarLabel:            d->buttonDown = ctrl;            d->moveOffset = mapToParent(e->pos());            break;        default:            break;        }        update();    } else {        d->pressed = false;    }}void QWorkspaceTitleBar::contextMenuEvent(QContextMenuEvent *e){    QStyleOptionTitleBar opt;    initStyleOption(&opt);    QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, e->pos(),                                                             this);    if(ctrl == QStyle::SC_TitleBarLabel || ctrl == QStyle::SC_TitleBarSysMenu) {        e->accept();        emit popupOperationMenu(e->globalPos());    } else {        e->ignore();    }}void QWorkspaceTitleBar::mouseReleaseEvent(QMouseEvent *e){    Q_D(QWorkspaceTitleBar);    if (!d->window) {        // could have been deleted as part of a double click event on the sysmenu        return;    }    if (e->button() == Qt::LeftButton && d->pressed) {        if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, 0)            && !rect().adjusted(5, 5, -5, 0).contains(e->pos())) {            // propagate border events to the QWidgetResizeHandler            e->ignore();            d->buttonDown = QStyle::SC_None;            d->pressed = false;            return;        }        e->accept();        QStyleOptionTitleBar opt;        initStyleOption(&opt);        QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt,                                                                 e->pos(), this);        if (d->pressed) {            update();            d->pressed = false;            d->moving = false;        }        if (ctrl == d->buttonDown) {            d->buttonDown = QStyle::SC_None;            switch(ctrl) {            case QStyle::SC_TitleBarShadeButton:            case QStyle::SC_TitleBarUnshadeButton:                if(d->flags & Qt::WindowShadeButtonHint)                    emit doShade();                break;            case QStyle::SC_TitleBarNormalButton:                if(d->flags & Qt::WindowMinMaxButtonsHint)                    emit doNormal();                break;            case QStyle::SC_TitleBarMinButton:                if(d->flags & Qt::WindowMinimizeButtonHint) {                    if (d->window && d->window->isMinimized())                        emit doNormal();                    else                        emit doMinimize();                }                break;            case QStyle::SC_TitleBarMaxButton:                if(d->flags & Qt::WindowMaximizeButtonHint) {                    if(d->window && d->window->isMaximized())                        emit doNormal();                    else                        emit doMaximize();                }                break;            case QStyle::SC_TitleBarCloseButton:                if(d->flags & Qt::WindowSystemMenuHint) {                    d->buttonDown = QStyle::SC_None;                    emit doClose();                    return;                }                break;            default:                break;            }        }    } else {        e->ignore();    }}void QWorkspaceTitleBar::mouseMoveEvent(QMouseEvent *e){    Q_D(QWorkspaceTitleBar);    e->ignore();    if ((e->buttons() & Qt::LeftButton) && style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, 0)        && !rect().adjusted(5, 5, -5, 0).contains(e->pos()) && !d->pressed) {        // propagate border events to the QWidgetResizeHandler        return;    }    QStyleOptionTitleBar opt;    initStyleOption(&opt);    QStyle::SubControl under_mouse = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt,                                                                    e->pos(), this);    if(under_mouse != d->lastControl) {        d->lastControl = under_mouse;        update();    }    switch (d->buttonDown) {    case QStyle::SC_None:        break;    case QStyle::SC_TitleBarSysMenu:        break;    case QStyle::SC_TitleBarLabel:        if (d->buttonDown == QStyle::SC_TitleBarLabel && d->movable && d->pressed) {            if (d->moving || (d->moveOffset - mapToParent(e->pos())).manhattanLength() >= 4) {                d->moving = true;                QPoint p = mapFromGlobal(e->globalPos());                QWidget *parent = d->window ? d->window->parentWidget() : 0;                if(parent && parent->inherits("QWorkspaceChild")) {                    QWidget *workspace = parent->parentWidget();                    p = workspace->mapFromGlobal(e->globalPos());                    if (!workspace->rect().contains(p)) {                        if (p.x() < 0)                            p.rx() = 0;                        if (p.y() < 0)                            p.ry() = 0;                        if (p.x() > workspace->width())                            p.rx() = workspace->width();                        if (p.y() > workspace->height())                            p.ry() = workspace->height();                    }                }                QPoint pp = p - d->moveOffset;                if (!parentWidget()->isMaximized())                    parentWidget()->move(pp);            }        }        e->accept();        break;    default:        break;    }}bool QWorkspaceTitleBar::isTool() const{    Q_D(const QWorkspaceTitleBar);    return (d->flags & Qt::WindowType_Mask) == Qt::Tool;}// from qwidget.cppextern QString qt_setWindowTitle_helperHelper(const QString &, QWidget*);void QWorkspaceTitleBar::paintEvent(QPaintEvent *){    Q_D(QWorkspaceTitleBar);    QStyleOptionTitleBar opt;    initStyleOption(&opt);    opt.subControls = QStyle::SC_TitleBarLabel;    opt.activeSubControls = d->buttonDown;    if (d->window && (d->flags & Qt::WindowTitleHint)) {        QString title = qt_setWindowTitle_helperHelper(opt.text, d->window);        int maxw = style()->subControlRect(QStyle::CC_TitleBar, &opt, QStyle::SC_TitleBarLabel,                                       this).width();        opt.text = fontMetrics().elidedText(title, Qt::ElideRight, maxw);    }    if (d->flags & Qt::WindowSystemMenuHint) {        opt.subControls |= QStyle::SC_TitleBarSysMenu | QStyle::SC_TitleBarCloseButton;        if (d->window && (d->flags & Qt::WindowShadeButtonHint)) {            if (d->window->isMinimized())                opt.subControls |= QStyle::SC_TitleBarUnshadeButton;            else                opt.subControls |= QStyle::SC_TitleBarShadeButton;        }        if (d->window && (d->flags & Qt::WindowMinMaxButtonsHint)) {            if(d->window && d->window->isMinimized())                opt.subControls |= QStyle::SC_TitleBarNormalButton;            else                opt.subControls |= QStyle::SC_TitleBarMinButton;        }        if (d->window && (d->flags & Qt::WindowMaximizeButtonHint) && !d->window->isMaximized())            opt.subControls |= QStyle::SC_TitleBarMaxButton;    }    QStyle::SubControl under_mouse = QStyle::SC_None;    under_mouse = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt,                                                     mapFromGlobal(QCursor::pos()), this);    if ((d->buttonDown == under_mouse) && d->pressed) {        opt.state |= QStyle::State_Sunken;    } else if( autoRaise() && under_mouse != QStyle::SC_None && !d->pressed) {        opt.activeSubControls = under_mouse;        opt.state |= QStyle::State_MouseOver;    }    opt.palette.setCurrentColorGroup(usesActiveColor() ? QPalette::Active : QPalette::Inactive);    QPainter p(this);    style()->drawComplexControl(QStyle::CC_TitleBar, &opt, &p, this);}void QWorkspaceTitleBar::mouseDoubleClickEvent(QMouseEvent *e){    Q_D(QWorkspaceTitleBar);    if (e->button() != Qt::LeftButton) {        e->ignore();        return;    }    e->accept();    QStyleOptionTitleBar opt;    initStyleOption(&opt);    switch (style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, e->pos(), this)) {    case QStyle::SC_TitleBarLabel:        emit doubleClicked();        break;    case QStyle::SC_TitleBarSysMenu:        if (d->flags & Qt::WindowSystemMenuHint)            emit doClose();        break;    default:        break;    }}void QWorkspaceTitleBar::leaveEvent(QEvent *){    Q_D(QWorkspaceTitleBar);    d->lastControl = QStyle::SC_None;    if(autoRaise() && !d->pressed)        update();}void QWorkspaceTitleBar::enterEvent(QEvent *){    Q_D(QWorkspaceTitleBar);    if(autoRaise() && !d->pressed)        update();    QEvent e(QEvent::Leave);    QApplication::sendEvent(parentWidget(), &e);}void QWorkspaceTitleBar::setActive(bool active){    Q_D(QWorkspaceTitleBar);    if (d->act == active)        return ;    d->act = active;    update();}bool QWorkspaceTitleBar::isActive() const{    Q_D(const QWorkspaceTitleBar);    return d->act;}bool QWorkspaceTitleBar::usesActiveColor() const{    return (isActive() && isActiveWindow()) ||        (!window() && QWidget::window()->isActiveWindow());}QWidget *QWorkspaceTitleBar::window() const{    Q_D(const QWorkspaceTitleBar);    return d->window;}bool QWorkspaceTitleBar::event(QEvent *e){    Q_D(QWorkspaceTitleBar);    if (e->type() == QEvent::ApplicationPaletteChange) {        d->readColors();    } else if (e->type() == QEvent::WindowActivate               || e->type() == QEvent::WindowDeactivate) {        if (d->act)            update();    }    return QWidget::event(e);}void QWorkspaceTitleBar::setMovable(bool b){    Q_D(QWorkspaceTitleBar);    d->movable = b;}bool QWorkspaceTitleBar::isMovable() const{    Q_D(const QWorkspaceTitleBar);    return d->movable;}void QWorkspaceTitleBar::setAutoRaise(bool b){    Q_D(QWorkspaceTitleBar);    d->autoraise = b;}bool QWorkspaceTitleBar::autoRaise() const{    Q_D(const QWorkspaceTitleBar);    return d->autoraise;}QSize QWorkspaceTitleBar::sizeHint() const{    ensurePolished();    QStyleOptionTitleBar opt;    initStyleOption(&opt);    QRect menur = style()->subControlRect(QStyle::CC_TitleBar, &opt,                                          QStyle::SC_TitleBarSysMenu, this);    return QSize(menur.width(), style()->pixelMetric(QStyle::PM_TitleBarHeight, &opt, this));}/*!    \class QWorkspace    \obsolete    \brief The QWorkspace widget provides a workspace window that can be    used in an MDI application.    \ingroup application    This class is deprecated. Use QMdiArea instead.    Multiple Document Interface (MDI) applications are typically    composed of a main window containing a menu bar, a toolbar, and    a central QWorkspace widget. The workspace itself is used to display    a number of child windows, each of which is a widget.    The workspace itself is an ordinary Qt widget. It has a standard    constructor that takes a parent widget.    Workspaces can be placed in any layout, but are typically given    as the central widget in a QMainWindow:    \code    MainWindow::MainWindow()    {        workspace = new QWorkspace;        setCentralWidget(workspace);

⌨️ 快捷键说明

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