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

📄 q3titlebar.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            repaint();            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::WindowMaximizeButtonHint)                    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;                    repaint();                    emit doClose();                    return;                }                break;            default:                break;            }        }    } else {        e->ignore();    }}void Q3TitleBar::mouseMoveEvent(QMouseEvent *e){    Q_D(Q3TitleBar);    e->accept();    switch (d->buttonDown) {    case QStyle::SC_None:        if(autoRaise())            repaint();        break;    case QStyle::SC_TitleBarSysMenu:        break;    case QStyle::SC_TitleBarShadeButton:    case QStyle::SC_TitleBarUnshadeButton:    case QStyle::SC_TitleBarNormalButton:    case QStyle::SC_TitleBarMinButton:    case QStyle::SC_TitleBarMaxButton:    case QStyle::SC_TitleBarCloseButton:        {            QStyle::SubControl last_ctrl = d->buttonDown;            QStyleOptionTitleBar opt = d->getStyleOption();            d->buttonDown = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, e->pos(), this);            if (d->buttonDown != last_ctrl)                d->buttonDown = QStyle::SC_None;            repaint();            d->buttonDown = last_ctrl;        }        break;    case QStyle::SC_TitleBarLabel:        if (d->buttonDown == QStyle::SC_TitleBarLabel && d->movable && d->pressed) {            if ((d->moveOffset - mapToParent(e->pos())).manhattanLength() >= 4) {                QPoint p = mapFromGlobal(e->globalPos());                QWidget *parent = d->window ? d->window->parentWidget() : 0;                if(parent && parent->inherits("Q3WorkspaceChild")) {                    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);            }        } else {            QStyle::SubControl last_ctrl = d->buttonDown;            d->buttonDown = QStyle::SC_None;            if(d->buttonDown != last_ctrl)                repaint();        }        break;    default:        break;    }}void Q3TitleBar::resizeEvent(QResizeEvent *r){    QWidget::resizeEvent(r);    cutText();}bool Q3TitleBar::isTool() const{    return (d_func()->flags & Qt::WindowType_Mask) == Qt::Tool;}void Q3TitleBar::paintEvent(QPaintEvent *){    Q_D(Q3TitleBar);    QStyleOptionTitleBar opt = d->getStyleOption();    opt.subControls = QStyle::SC_TitleBarLabel;    opt.activeSubControls = d->buttonDown;    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;        if (underMouse()) {        under_mouse = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt,                                                     mapFromGlobal(QCursor::pos()), this);        opt.activeSubControls |= under_mouse;        if (d->pressed)            opt.state |= QStyle::State_Sunken;        else if(autoRaise())            opt.state |= QStyle::State_MouseOver;    }        opt.palette.setCurrentColorGroup(usesActiveColor() ? QPalette::Active : QPalette::Inactive);    QPainter p(this);    if (!windowTitle().isEmpty())        opt.titleBarFlags |= Qt::WindowTitleHint;    style()->drawComplexControl(QStyle::CC_TitleBar, &opt, &p, this);}void Q3TitleBar::mouseDoubleClickEvent(QMouseEvent *e){    Q_D(Q3TitleBar);    if (e->button() != Qt::LeftButton) {        e->ignore();        return;    }    e->accept();    QStyleOptionTitleBar opt = d->getStyleOption();    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::WStyle_SysMenu)            emit doClose();        break;    default:        break;    }}void Q3TitleBar::cutText(){    Q_D(Q3TitleBar);    QFontMetrics fm(font());    QStyleOptionTitleBar opt = d->getStyleOption();    int maxw = style()->subControlRect(QStyle::CC_TitleBar, &opt, QStyle::SC_TitleBarLabel,                                       this).width();    if (!d->window)        return;    QString txt = d->window->windowTitle();    if (style()->styleHint(QStyle::SH_TitleBar_ModifyNotification, 0, this) && d->window        && d->window->isWindowModified())        txt += QLatin1String(" *");    QString cuttext = txt;    if (fm.width(txt + QLatin1Char('m')) > maxw) {        int i = txt.length();        int dotlength = fm.width(QLatin1String("..."));        while (i>0 && fm.width(txt.left(i)) + dotlength > maxw)            i--;        if(i != (int)txt.length())            cuttext = txt.left(i) + QLatin1String("...");    }    setWindowTitle(cuttext);}void Q3TitleBar::leaveEvent(QEvent *){    if(autoRaise() && !d_func()->pressed)        repaint();}void Q3TitleBar::enterEvent(QEvent *){    if(autoRaise() && !d_func()->pressed)        repaint();    QEvent e(QEvent::Leave);    QApplication::sendEvent(parentWidget(), &e);}void Q3TitleBar::setActive(bool active){    Q_D(Q3TitleBar);    if (d->act == active)        return ;    d->act = active;    update();}bool Q3TitleBar::isActive() const{    return d_func()->act;}bool Q3TitleBar::usesActiveColor() const{    return (isActive() && isActiveWindow()) ||        (!window() && QWidget::window()->isActiveWindow());}QWidget *Q3TitleBar::window() const{    return d_func()->window;}bool Q3TitleBar::event(QEvent *e){    Q_D(Q3TitleBar);    if (d->inevent)        return QWidget::event(e);    d->inevent = true;    if (e->type() == QEvent::ApplicationPaletteChange) {        d->readColors();        return true;    } else if (e->type() == QEvent::WindowActivate) {        setActive(d->act);    } else if (e->type() == QEvent::WindowDeactivate) {        bool wasActive = d->act;        setActive(false);        d->act = wasActive;    } else if (e->type() == QEvent::WindowIconChange) {        update();    } else if (e->type() == QEvent::WindowTitleChange) {        cutText();        update();    }    d->inevent = false;    return QWidget::event(e);}void Q3TitleBar::setMovable(bool b){    d_func()->movable = b;}bool Q3TitleBar::isMovable() const{    return d_func()->movable;}void Q3TitleBar::setAutoRaise(bool b){    d_func()->autoraise = b;}bool Q3TitleBar::autoRaise() const{    return d_func()->autoraise;}QSize Q3TitleBar::sizeHint() const{    ensurePolished();    QStyleOptionTitleBar opt = d_func()->getStyleOption();    QRect menur = style()->subControlRect(QStyle::CC_TitleBar, &opt,                                          QStyle::SC_TitleBarSysMenu, this);    return QSize(menur.width(), style()->pixelMetric(QStyle::PM_TitleBarHeight, &opt, this));}#endif //QT_NO_TITLEBAR

⌨️ 快捷键说明

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