📄 qtextcontrol.cpp
字号:
void QTextControl::selectAll(){ Q_D(QTextControl); d->cursor.select(QTextCursor::Document); d->selectionChanged(); d->cursorIsFocusIndicator = false; emit updateRequest(QRectF(QPointF(), d->doc->documentLayout()->documentSize()));}void QTextControl::processEvent(QEvent *e, const QPointF &coordinateOffset, QWidget *contextWidget){ QMatrix m; m.translate(coordinateOffset.x(), coordinateOffset.y()); processEvent(e, m, contextWidget);}void QTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget *contextWidget){ Q_D(QTextControl); if (d->interactionFlags & Qt::NoTextInteraction) return; d->contextWidget = contextWidget; if (!d->contextWidget) { switch (e->type()) {#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMouseMove: case QEvent::GraphicsSceneMousePress: case QEvent::GraphicsSceneMouseRelease: case QEvent::GraphicsSceneMouseDoubleClick: case QEvent::GraphicsSceneContextMenu: case QEvent::GraphicsSceneHoverEnter: case QEvent::GraphicsSceneHoverMove: case QEvent::GraphicsSceneHoverLeave: case QEvent::GraphicsSceneHelp: case QEvent::GraphicsSceneDragEnter: case QEvent::GraphicsSceneDragMove: case QEvent::GraphicsSceneDragLeave: case QEvent::GraphicsSceneDrop: { QGraphicsSceneEvent *ev = static_cast<QGraphicsSceneEvent *>(e); d->contextWidget = ev->widget(); break; }#endif // QT_NO_GRAPHICSVIEW default: break; }; } switch (e->type()) { case QEvent::KeyPress: d->keyPressEvent(static_cast<QKeyEvent *>(e)); break; case QEvent::MouseButtonPress: { QMouseEvent *ev = static_cast<QMouseEvent *>(e); d->mousePressEvent(ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(), ev->globalPos()); break; } case QEvent::MouseMove: { QMouseEvent *ev = static_cast<QMouseEvent *>(e); d->mouseMoveEvent(ev->buttons(), matrix.map(ev->pos())); break; } case QEvent::MouseButtonRelease: { QMouseEvent *ev = static_cast<QMouseEvent *>(e); d->mouseReleaseEvent(ev->button(), matrix.map(ev->pos())); break; } case QEvent::MouseButtonDblClick: { QMouseEvent *ev = static_cast<QMouseEvent *>(e); d->mouseDoubleClickEvent(e, ev->button(), matrix.map(ev->pos())); break; } case QEvent::InputMethod: d->inputMethodEvent(static_cast<QInputMethodEvent *>(e)); break; case QEvent::ContextMenu: { QContextMenuEvent *ev = static_cast<QContextMenuEvent *>(e); d->contextMenuEvent(ev->globalPos(), matrix.map(ev->pos()), contextWidget); break; } case QEvent::FocusIn: case QEvent::FocusOut: d->focusEvent(static_cast<QFocusEvent *>(e)); break; case QEvent::EnabledChange: d->isEnabled = e->isAccepted(); break;#ifndef QT_NO_TOOLTIP case QEvent::ToolTip: { QHelpEvent *ev = static_cast<QHelpEvent *>(e); d->showToolTip(ev->globalPos(), matrix.map(ev->pos()), contextWidget); break; }#endif // QT_NO_TOOLTIP#ifndef QT_NO_DRAGANDDROP case QEvent::DragEnter: { QDragEnterEvent *ev = static_cast<QDragEnterEvent *>(e); if (d->dragEnterEvent(e, ev->mimeData())) ev->acceptProposedAction(); break; } case QEvent::DragLeave: d->dragLeaveEvent(); break; case QEvent::DragMove: { QDragMoveEvent *ev = static_cast<QDragMoveEvent *>(e); if (d->dragMoveEvent(e, ev->mimeData(), matrix.map(ev->pos()))) ev->acceptProposedAction(); break; } case QEvent::Drop: { QDropEvent *ev = static_cast<QDropEvent *>(e); if (d->dropEvent(ev->mimeData(), matrix.map(ev->pos()), ev->proposedAction(), ev->source())) ev->acceptProposedAction(); break; }#endif#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMousePress: { QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e); d->mousePressEvent(ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(), ev->screenPos()); break; } case QEvent::GraphicsSceneMouseMove: { QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e); d->mouseMoveEvent(ev->buttons(), matrix.map(ev->pos())); break; } case QEvent::GraphicsSceneMouseRelease: { QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e); d->mouseReleaseEvent(ev->button(), matrix.map(ev->pos())); break; } case QEvent::GraphicsSceneMouseDoubleClick: { QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e); d->mouseDoubleClickEvent(e, ev->button(), matrix.map(ev->pos())); break; } case QEvent::GraphicsSceneContextMenu: { QGraphicsSceneContextMenuEvent *ev = static_cast<QGraphicsSceneContextMenuEvent *>(e); d->contextMenuEvent(ev->screenPos(), matrix.map(ev->pos()), contextWidget); break; } case QEvent::GraphicsSceneHoverMove: { QGraphicsSceneHoverEvent *ev = static_cast<QGraphicsSceneHoverEvent *>(e); d->mouseMoveEvent(Qt::NoButton, matrix.map(ev->pos())); break; } case QEvent::GraphicsSceneDragEnter: { QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e); if (d->dragEnterEvent(e, ev->mimeData())) ev->acceptProposedAction(); break; } case QEvent::GraphicsSceneDragLeave: d->dragLeaveEvent(); break; case QEvent::GraphicsSceneDragMove: { QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e); if (d->dragMoveEvent(e, ev->mimeData(), matrix.map(ev->pos()))) ev->acceptProposedAction(); break; } case QEvent::GraphicsSceneDrop: { QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e); if (d->dropEvent(ev->mimeData(), matrix.map(ev->pos()), ev->proposedAction(), ev->source())) ev->acceptProposedAction(); break; }#endif // QT_NO_GRAPHICSVIEW#ifdef QT_KEYPAD_NAVIGATION case QEvent::EnterEditFocus: case QEvent::LeaveEditFocus: if (QApplication::keypadNavigationEnabled()) d->editFocusEvent(e); break;#endif case QEvent::ShortcutOverride: if (d->interactionFlags & Qt::TextEditable) { QKeyEvent* ke = static_cast<QKeyEvent *>(e); if (ke->modifiers() == Qt::NoModifier || ke->modifiers() == Qt::ShiftModifier || ke->modifiers() == Qt::KeypadModifier) { if (ke->key() < Qt::Key_Escape) { ke->accept(); } else { switch (ke->key()) { case Qt::Key_Return: case Qt::Key_Enter: case Qt::Key_Delete: case Qt::Key_Home: case Qt::Key_End: case Qt::Key_Backspace: case Qt::Key_Left: case Qt::Key_Right: ke->accept(); default: break; } }#ifndef QT_NO_SHORTCUT } else if (ke == QKeySequence::Copy || ke == QKeySequence::Paste || ke == QKeySequence::Cut || ke == QKeySequence::Redo || ke == QKeySequence::Undo || ke == QKeySequence::MoveToNextWord || ke == QKeySequence::MoveToPreviousWord || ke == QKeySequence::MoveToStartOfDocument || ke == QKeySequence::MoveToEndOfDocument ) { ke->accept();#endif } } // FALL THROUGH default: break; }}bool QTextControl::event(QEvent *e){ return QObject::event(e);}void QTextControl::timerEvent(QTimerEvent *e){ Q_D(QTextControl); if (e->timerId() == d->cursorBlinkTimer.timerId()) { d->cursorOn = !d->cursorOn; if (d->cursor.hasSelection()) d->cursorOn &= (QApplication::style()->styleHint(QStyle::SH_BlinkCursorWhenTextSelected) != 0); d->repaintCursor(); } else if (e->timerId() == d->trippleClickTimer.timerId()) { d->trippleClickTimer.stop(); }}void QTextControl::setPlainText(const QString &text){ Q_D(QTextControl); d->setContent(Qt::PlainText, text);}void QTextControl::setHtml(const QString &text){ Q_D(QTextControl); d->setContent(Qt::RichText, text);}void QTextControlPrivate::keyPressEvent(QKeyEvent *e){ Q_Q(QTextControl);#ifndef QT_NO_SHORTCUT if (e == QKeySequence::SelectAll) { e->accept(); q->selectAll(); return; }#ifndef QT_NO_CLIPBOARD else if (e == QKeySequence::Copy) { e->accept(); q->copy(); return; }#endif#endif // QT_NO_SHORTCUT if (interactionFlags & Qt::TextSelectableByKeyboard && cursorMoveKeyEvent(e)) goto accept; if (interactionFlags & Qt::LinksAccessibleByKeyboard) { if ((e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter#ifdef QT_KEYPAD_NAVIGATION || e->key() == Qt::Key_Select#endif ) && cursor.hasSelection()) { e->accept(); activateLinkUnderCursor(); return; } } if (!(interactionFlags & Qt::TextEditable)) { e->ignore(); return; } if (e->key() == Qt::Key_Direction_L || e->key() == Qt::Key_Direction_R) { QTextBlockFormat fmt; fmt.setLayoutDirection((e->key() == Qt::Key_Direction_L) ? Qt::LeftToRight : Qt::RightToLeft); cursor.mergeBlockFormat(fmt); goto accept; } // schedule a repaint of the region of the cursor, as when we move it we // want to make sure the old cursor disappears (not noticeable when moving // only a few pixels but noticeable when jumping between cells in tables for // example) repaintSelection(); if (e->key() == Qt::Key_Backspace && !(e->modifiers() & ~Qt::ShiftModifier)) { QTextBlockFormat blockFmt = cursor.blockFormat(); QTextList *list = cursor.currentList(); if (list && cursor.atBlockStart()) { list->remove(cursor.block()); } else if (cursor.atBlockStart() && blockFmt.indent() > 0) { blockFmt.setIndent(blockFmt.indent() - 1); cursor.setBlockFormat(blockFmt); } else { cursor.deletePreviousChar(); } goto accept; } else if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) { if (e->modifiers() & Qt::ControlModifier) cursor.insertText(QString(QChar::LineSeparator)); else cursor.insertBlock(); e->accept(); goto accept; } if (false) { }#ifndef QT_NO_SHORTCUT else if (e == QKeySequence::Undo) { q->undo(); } else if (e == QKeySequence::Redo) { q->redo(); }#ifndef QT_NO_CLIPBOARD else if (e == QKeySequence::Cut) { q->cut(); } else if (e == QKeySequence::Paste) { q->paste(); }#endif else if (e == QKeySequence::Delete) { cursor.deleteChar(); } else if (e == QKeySequence::DeleteEndOfWord) { cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor); cursor.deleteChar(); } else if (e == QKeySequence::DeleteStartOfWord) { cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::KeepAnchor); cursor.deleteChar(); } else if (e == QKeySequence::DeleteEndOfLine) { QTextBlock block = cursor.block(); if (cursor.position() == block.position() + block.length() - 2) cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); else cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); cursor.deleteChar(); }#endif // QT_NO_SHORTCUT else { goto process; } goto accept;process: { QString text = e->text(); if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t'))) { if (overwriteMode // no need to call deleteChar() if we have a selection, insertText // does it already && !cursor.hasSelection() && !cursor.atBlockEnd()) cursor.deleteChar(); cursor.insertText(text); selectionChanged(); } else { e->ignore(); return; } } accept: e->accept(); cursorOn = true; q->ensureCursorVisible(); updateCurrentCharFormat();}QVariant QTextControl::loadResource(int type, const QUrl &name){#ifdef QT_NO_TEXTEDIT Q_UNUSED(type); Q_UNUSED(name);#else if (QTextEdit *textEdit = qobject_cast<QTextEdit *>(parent()))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -