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

📄 qwidgetresizehandler.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        break;    case TopRight:        geom = QRect(QPoint(widget->geometry().x(), mp.y()), QPoint(p.x(), widget->geometry().bottom())) ;        break;    case Top:        geom = QRect(QPoint(widget->geometry().left(), mp.y()), widget->geometry().bottomRight()) ;        break;    case Bottom:        geom = QRect(widget->geometry().topLeft(), QPoint(widget->geometry().right(), p.y())) ;        break;    case Left:        geom = QRect(QPoint(mp.x(), widget->geometry().top()), widget->geometry().bottomRight()) ;        break;    case Right:        geom = QRect(widget->geometry().topLeft(), QPoint(p.x(), widget->geometry().bottom())) ;        break;    case Center:        if (moveResizeMode)            geom.moveTopLeft(pp);        break;    default:        break;    }    QSize maxsize(childWidget->maximumSize());    if (childWidget != widget)        maxsize += QSize(2 * fw, 2 * fw + extrahei);    geom = QRect(geom.topLeft(),                  geom.size().expandedTo(widget->minimumSize())                             .expandedTo(QSize(mw, mh))                             .boundedTo(maxsize));    if (geom != widget->geometry() &&        (widget->isWindow() || widget->parentWidget()->rect().intersects(geom))) {        if (widget->isMinimized())            widget->move(geom.topLeft());        else            widget->setGeometry(geom);    }    QApplication::syncX();}void QWidgetResizeHandler::setMouseCursor(MousePosition m){#ifdef QT_NO_CURSOR    Q_UNUSED(m);#else    QObjectList children = widget->children();    for (int i = 0; i < children.size(); ++i) {        if (QWidget *w = qobject_cast<QWidget*>(children.at(i))) {            if (!w->testAttribute(Qt::WA_SetCursor) && !w->inherits("QWorkspaceTitleBar")) {                w->setCursor(Qt::ArrowCursor);            }        }    }    switch (m) {    case TopLeft:    case BottomRight:        widget->setCursor(Qt::SizeFDiagCursor);        break;    case BottomLeft:    case TopRight:        widget->setCursor(Qt::SizeBDiagCursor);        break;    case Top:    case Bottom:        widget->setCursor(Qt::SizeVerCursor);        break;    case Left:    case Right:        widget->setCursor(Qt::SizeHorCursor);        break;    default:        widget->setCursor(Qt::ArrowCursor);        break;    }#endif // QT_NO_CURSOR}void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e){    if (!isMove() && !isResize())        return;    bool is_control = e->modifiers() & Qt::ControlModifier;    int delta = is_control?1:8;    QPoint pos = QCursor::pos();    switch (e->key()) {    case Qt::Key_Left:        pos.rx() -= delta;        if (pos.x() <= QApplication::desktop()->geometry().left()) {            if (mode == TopLeft || mode == BottomLeft) {                moveOffset.rx() += delta;                invertedMoveOffset.rx() += delta;            } else {                moveOffset.rx() -= delta;                invertedMoveOffset.rx() -= delta;            }        }        if (isResize() && !resizeHorizontalDirectionFixed) {            resizeHorizontalDirectionFixed = true;            if (mode == BottomRight)                mode = BottomLeft;            else if (mode == TopRight)                mode = TopLeft;#ifndef QT_NO_CURSOR            setMouseCursor(mode);            widget->grabMouse(widget->cursor());#else            widget->grabMouse();#endif        }        break;    case Qt::Key_Right:        pos.rx() += delta;        if (pos.x() >= QApplication::desktop()->geometry().right()) {            if (mode == TopRight || mode == BottomRight) {                moveOffset.rx() += delta;                invertedMoveOffset.rx() += delta;            } else {                moveOffset.rx() -= delta;                invertedMoveOffset.rx() -= delta;            }        }        if (isResize() && !resizeHorizontalDirectionFixed) {            resizeHorizontalDirectionFixed = true;            if (mode == BottomLeft)                mode = BottomRight;            else if (mode == TopLeft)                mode = TopRight;#ifndef QT_NO_CURSOR            setMouseCursor(mode);            widget->grabMouse(widget->cursor());#else            widget->grabMouse();#endif        }        break;    case Qt::Key_Up:        pos.ry() -= delta;        if (pos.y() <= QApplication::desktop()->geometry().top()) {            if (mode == TopLeft || mode == TopRight) {                moveOffset.ry() += delta;                invertedMoveOffset.ry() += delta;            } else {                moveOffset.ry() -= delta;                invertedMoveOffset.ry() -= delta;            }        }        if (isResize() && !resizeVerticalDirectionFixed) {            resizeVerticalDirectionFixed = true;            if (mode == BottomLeft)                mode = TopLeft;            else if (mode == BottomRight)                mode = TopRight;#ifndef QT_NO_CURSOR            setMouseCursor(mode);            widget->grabMouse(widget->cursor());#else            widget->grabMouse();#endif        }        break;    case Qt::Key_Down:        pos.ry() += delta;        if (pos.y() >= QApplication::desktop()->geometry().bottom()) {            if (mode == BottomLeft || mode == BottomRight) {                moveOffset.ry() += delta;                invertedMoveOffset.ry() += delta;            } else {                moveOffset.ry() -= delta;                invertedMoveOffset.ry() -= delta;            }        }        if (isResize() && !resizeVerticalDirectionFixed) {            resizeVerticalDirectionFixed = true;            if (mode == TopLeft)                mode = BottomLeft;            else if (mode == TopRight)                mode = BottomRight;#ifndef QT_NO_CURSOR            setMouseCursor(mode);            widget->grabMouse(widget->cursor());#else            widget->grabMouse();#endif        }        break;    case Qt::Key_Space:    case Qt::Key_Return:    case Qt::Key_Enter:    case Qt::Key_Escape:        moveResizeMode = false;        widget->releaseMouse();        widget->releaseKeyboard();        buttonDown = false;        break;    default:        return;    }    QCursor::setPos(pos);}void QWidgetResizeHandler::doResize(){    if (!activeForResize)        return;    moveResizeMode = true;    buttonDown = true;    moveOffset = widget->mapFromGlobal(QCursor::pos());    if (moveOffset.x() < widget->width()/2) {        if (moveOffset.y() < widget->height()/2)            mode = TopLeft;        else            mode = BottomLeft;    } else {        if (moveOffset.y() < widget->height()/2)            mode = TopRight;        else            mode = BottomRight;    }    invertedMoveOffset = widget->rect().bottomRight() - moveOffset;#ifndef QT_NO_CURSOR    setMouseCursor(mode);    widget->grabMouse(widget->cursor() );#else    widget->grabMouse();#endif    widget->grabKeyboard();    resizeHorizontalDirectionFixed = false;    resizeVerticalDirectionFixed = false;}void QWidgetResizeHandler::doMove(){    if (!activeForMove)        return;    mode = Center;    moveResizeMode = true;    buttonDown = true;    moveOffset = widget->mapFromGlobal(QCursor::pos());    invertedMoveOffset = widget->rect().bottomRight() - moveOffset;#ifndef QT_NO_CURSOR    widget->grabMouse(Qt::SizeAllCursor);#else    widget->grabMouse();#endif    widget->grabKeyboard();}#endif //QT_NO_RESIZEHANDLER

⌨️ 快捷键说明

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