📄 qwidgetresizehandler.cpp
字号:
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 + -