📄 q3textedit.cpp
字号:
break; case Qt::ControlButton: case Qt::ControlButton|Qt::ShiftButton: case Qt::ControlButton|Qt::Keypad: case Qt::ControlButton|Qt::ShiftButton|Qt::Keypad: switch (ke->key()) { case Qt::Key_Tab: case Qt::Key_Backtab: ke->ignore(); break;// Those are too frequently used for application functionality/* case Qt::Key_A: case Qt::Key_B: case Qt::Key_D: case Qt::Key_E: case Qt::Key_F: case Qt::Key_H: case Qt::Key_I: case Qt::Key_K: case Qt::Key_N: case Qt::Key_P: case Qt::Key_T:*/ case Qt::Key_C: case Qt::Key_V: case Qt::Key_X: case Qt::Key_Y: case Qt::Key_Z: case Qt::Key_Left: case Qt::Key_Right: case Qt::Key_Up: case Qt::Key_Down: case Qt::Key_Home: case Qt::Key_End:#if defined (Q_WS_WIN) case Qt::Key_Insert: case Qt::Key_Delete:#endif ke->accept(); default: break; } break; default: switch (ke->key()) {#if defined (Q_WS_WIN) case Qt::Key_Insert: ke->accept();#endif default: break; } break; } } if (e->type() == QEvent::Show) { if (#ifdef QT_TEXTEDIT_OPTIMIZATION !d->optimMode &&#endif d->ensureCursorVisibleInShowEvent ) { ensureCursorVisible(); d->ensureCursorVisibleInShowEvent = false; } if (!d->scrollToAnchor.isEmpty()) { scrollToAnchor(d->scrollToAnchor); d->scrollToAnchor.clear(); } } return QWidget::event(e);}/*! Processes the key event, \a e. By default key events are used to provide keyboard navigation and text editing.*/void Q3TextEdit::keyPressEvent(QKeyEvent *e){ changeIntervalTimer->stop(); interval = 10; bool unknownKey = false; if (isReadOnly()) { if (!handleReadOnlyKeyEvent(e)) Q3ScrollView::keyPressEvent(e); changeIntervalTimer->start(100, true); return; } bool selChanged = false; for (int i = 1; i < doc->numSelections(); ++i) // start with 1 as we don't want to remove the Standard-Selection selChanged = doc->removeSelection(i) || selChanged; if (selChanged) { cursor->paragraph()->document()->nextDoubleBuffered = true; repaintChanged(); } bool clearUndoRedoInfo = true; switch (e->key()) { case Qt::Key_Left: case Qt::Key_Right: { // a bit hacky, but can't change this without introducing new enum values for move and keeping the // correct semantics and movement for BiDi and non BiDi text. CursorAction a; if (cursor->paragraph()->string()->isRightToLeft() == (e->key() == Qt::Key_Right)) a = e->state() & Qt::ControlButton ? MoveWordBackward : MoveBackward; else a = e->state() & Qt::ControlButton ? MoveWordForward : MoveForward; moveCursor(a, e->state() & Qt::ShiftButton); break; } case Qt::Key_Up: moveCursor(e->state() & Qt::ControlButton ? MovePgUp : MoveUp, e->state() & Qt::ShiftButton); break; case Qt::Key_Down: moveCursor(e->state() & Qt::ControlButton ? MovePgDown : MoveDown, e->state() & Qt::ShiftButton); break; case Qt::Key_Home: moveCursor(e->state() & Qt::ControlButton ? MoveHome : MoveLineStart, e->state() & Qt::ShiftButton); break; case Qt::Key_End: moveCursor(e->state() & Qt::ControlButton ? MoveEnd : MoveLineEnd, e->state() & Qt::ShiftButton); break; case Qt::Key_Prior: moveCursor(MovePgUp, e->state() & Qt::ShiftButton); break; case Qt::Key_Next: moveCursor(MovePgDown, e->state() & Qt::ShiftButton); break; case Qt::Key_Return: case Qt::Key_Enter: if (doc->hasSelection(Q3TextDocument::Standard, false)) removeSelectedText(); if (textFormat() == Qt::RichText && (e->state() & Qt::ControlButton)) { // Ctrl-Enter inserts a line break in rich text mode insert(QString(QChar(QChar::LineSeparator)), true, false); } else {#ifndef QT_NO_CURSOR viewport()->setCursor(isReadOnly() ? Qt::ArrowCursor : Qt::IBeamCursor);#endif clearUndoRedoInfo = false; doKeyboardAction(ActionReturn); emit returnPressed(); } break; case Qt::Key_Delete:#if defined (Q_WS_WIN) if (e->state() & Qt::ShiftButton) { cut(); break; } else#endif if (doc->hasSelection(Q3TextDocument::Standard, true)) { removeSelectedText(); break; } doKeyboardAction(e->state() & Qt::ControlButton ? ActionWordDelete : ActionDelete); clearUndoRedoInfo = false; break; case Qt::Key_Insert: if (e->state() & Qt::ShiftButton) paste();#if defined (Q_WS_WIN) else if (e->state() & Qt::ControlButton) copy();#endif else setOverwriteMode(!isOverwriteMode()); break; case Qt::Key_Backspace:#if defined (Q_WS_WIN) if (e->state() & Qt::AltButton) { if (e->state() & Qt::ControlButton) { break; } else if (e->state() & Qt::ShiftButton) { redo(); break; } else { undo(); break; } } else#endif if (doc->hasSelection(Q3TextDocument::Standard, true)) { removeSelectedText(); break; } doKeyboardAction(e->state() & Qt::ControlButton ? ActionWordBackspace : ActionBackspace); clearUndoRedoInfo = false; break; case Qt::Key_F16: // Copy key on Sun keyboards copy(); break; case Qt::Key_F18: // Paste key on Sun keyboards paste(); break; case Qt::Key_F20: // Cut key on Sun keyboards cut(); break; case Qt::Key_Direction_L: if (doc->textFormat() == Qt::PlainText) { // change the whole doc Q3TextParagraph *p = doc->firstParagraph(); while (p) { p->setDirection(QChar::DirL); p->setAlignment(Qt::AlignLeft); p->invalidate(0); p = p->next(); } } else { if (!cursor->paragraph() || cursor->paragraph()->direction() == QChar::DirL) return; cursor->paragraph()->setDirection(QChar::DirL); if (cursor->paragraph()->length() <= 1&& ((cursor->paragraph()->alignment() & (Qt::AlignLeft | Qt::AlignRight)) != 0)) setAlignment(Qt::AlignLeft); } repaintChanged(); break; case Qt::Key_Direction_R: if (doc->textFormat() == Qt::PlainText) { // change the whole doc Q3TextParagraph *p = doc->firstParagraph(); while (p) { p->setDirection(QChar::DirR); p->setAlignment(Qt::AlignRight); p->invalidate(0); p = p->next(); } } else { if (!cursor->paragraph() || cursor->paragraph()->direction() == QChar::DirR) return; cursor->paragraph()->setDirection(QChar::DirR); if (cursor->paragraph()->length() <= 1&& ((cursor->paragraph()->alignment() & (Qt::AlignLeft | Qt::AlignRight)) != 0)) setAlignment(Qt::AlignRight); } repaintChanged(); break; default: { unsigned char ascii = e->text().length() ? e->text().unicode()->latin1() : 0; if (e->text().length() && (!(e->state() & Qt::ControlButton) &&#ifndef Q_OS_MAC !(e->state() & Qt::AltButton) &&#endif !(e->state() & Qt::MetaButton) || (((e->state() & (Qt::ControlButton | Qt::AltButton))) == (Qt::ControlButton|Qt::AltButton))) && (!ascii || ascii >= 32 || e->text() == QString(QLatin1Char('\t')))) { clearUndoRedoInfo = false; if (e->key() == Qt::Key_Tab) { if (d->tabChangesFocus) { e->ignore(); break; } if (textFormat() == Qt::RichText && cursor->index() == 0 && (cursor->paragraph()->isListItem() || cursor->paragraph()->listDepth())) { clearUndoRedo(); undoRedoInfo.type = UndoRedoInfo::Style; undoRedoInfo.id = cursor->paragraph()->paragId(); undoRedoInfo.eid = undoRedoInfo.id; undoRedoInfo.styleInformation = Q3TextStyleCommand::readStyleInformation(doc, undoRedoInfo.id, undoRedoInfo.eid); cursor->paragraph()->setListDepth(cursor->paragraph()->listDepth() +1); clearUndoRedo(); drawCursor(false); repaintChanged(); drawCursor(true); break; } } else if (e->key() == Qt::Key_BackTab) { if (d->tabChangesFocus) { e->ignore(); break; } } if ((autoFormatting() & AutoBulletList) && textFormat() == Qt::RichText && cursor->index() == 0 && !cursor->paragraph()->isListItem() && (e->text()[0] == QLatin1Char('-') || e->text()[0] == QLatin1Char('*'))) { clearUndoRedo(); undoRedoInfo.type = UndoRedoInfo::Style; undoRedoInfo.id = cursor->paragraph()->paragId(); undoRedoInfo.eid = undoRedoInfo.id; undoRedoInfo.styleInformation = Q3TextStyleCommand::readStyleInformation(doc, undoRedoInfo.id, undoRedoInfo.eid); setParagType(Q3StyleSheetItem::DisplayListItem, Q3StyleSheetItem::ListDisc); clearUndoRedo(); drawCursor(false); repaintChanged(); drawCursor(true); break; } if (overWrite && !cursor->atParagEnd() && !doc->hasSelection(Q3TextDocument::Standard)) { doKeyboardAction(ActionDelete); clearUndoRedoInfo = false; } QString t = e->text(); insert(t, true, false); break; } else if (e->state() & Qt::ControlButton) { switch (e->key()) { case Qt::Key_C: case Qt::Key_F16: // Copy key on Sun keyboards copy(); break; case Qt::Key_V: paste(); break; case Qt::Key_X: cut(); break; case Qt::Key_I: case Qt::Key_T: case Qt::Key_Tab: if (!d->tabChangesFocus) indent(); break; case Qt::Key_A:#if defined(Q_WS_X11) moveCursor(MoveLineStart, e->state() & Qt::ShiftButton);#else selectAll(true);#endif break; case Qt::Key_B: moveCursor(MoveBackward, e->state() & Qt::ShiftButton); break; case Qt::Key_F: moveCursor(MoveForward, e->state() & Qt::ShiftButton); break; case Qt::Key_D: if (doc->hasSelection(Q3TextDocument::Standard)) { removeSelectedText(); break; } doKeyboardAction(ActionDelete); clearUndoRedoInfo = false; break; case Qt::Key_H: if (doc->hasSelection(Q3TextDocument::Standard)) { removeSelectedText(); break; } if (!cursor->paragraph()->prev() && cursor->atParagStart()) break; doKeyboardAction(ActionBackspace); clearUndoRedoInfo = false; break; case Qt::Key_E: moveCursor(MoveLineEnd, e->state() & Qt::ShiftButton); break; case Qt::Key_N: moveCursor(MoveDown, e->state() & Qt::ShiftButton); break; case Qt::Key_P: moveCursor(MoveUp, e->state() & Qt::ShiftButton); break; case Qt::Key_Z: if(e->state() & Qt::ShiftButton) redo(); else undo(); break; case Qt::Key_Y:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -