📄 textedit.cpp
字号:
}//void TextEdit::slotFind(Ui::FindWidget ui, QString ttf,QTextDocument::FindFlags options, bool fromButton){ QTextDocument *doc = document(); QString oldText = ui.editFind->text(); QTextCursor c = textCursor(); QPalette p = ui.editFind->palette(); p.setColor(QPalette::Active, QPalette::Base, Qt::white); if (c.hasSelection()) { if ( options & QTextDocument::FindBackward || fromButton) c.setPosition(c.position(), QTextCursor::MoveAnchor); else c.setPosition(c.anchor(), QTextCursor::MoveAnchor); } QTextCursor newCursor = c; if (!ttf.isEmpty()) { newCursor = doc->find(ttf, c, options); ui.labelWrapped->hide(); if (newCursor.isNull()) { QTextCursor ac(doc); ac.movePosition(options & QTextDocument::FindBackward ? QTextCursor::End : QTextCursor::Start); newCursor = doc->find(ttf, ac, options); if (newCursor.isNull()) { p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102)); newCursor = c; } else ui.labelWrapped->show(); } } setTextCursor(newCursor); ui.editFind->setPalette(p);}//void TextEdit::paintEvent ( QPaintEvent * event ){ QPainter painter( viewport() ); if ( m_highlightCurrentLine && m_currentLineColor.isValid() ) { QRect r = cursorRect(); r.setX( 0 ); r.setWidth( viewport()->width() ); painter.fillRect( r, QBrush( m_currentLineColor ) ); } if (m_showWhiteSpaces || m_matchingBegin != -1) printWhiteSpacesAndMatching( painter ); QTextEdit::paintEvent( event );}//void TextEdit::mouseMoveEvent( QMouseEvent * event ){ setMouseHidden( false ); event->setAccepted( false ); QTextEdit::mouseMoveEvent( event );}//void TextEdit::slotCursorPositionChanged(){ if ( m_currentLineColor.isValid() ) viewport()->update(); m_plainText = toPlainText(); if ( m_match ) { clearMatch(); match(); }}//void TextEdit::clearMatch(){ m_matchingBegin = -1; m_matchingEnd = -1;}//void TextEdit::match(){ QString matchText = simplifiedText( m_plainText ); QTextCursor cursor = textCursor(); int pos = cursor.position(); m_matchingBegin = -1; m_matchingEnd = -1; if( pos==-1 || !QString("({[]})").contains( m_plainText.at( pos ) ) ) return; QChar car; if ( pos != -1 ) { if ( !cursor.atEnd() ) { car = matchText.at( pos ); } else { car = matchText.at( pos - 1); } } QChar matchCar; long inc = 1; if( car == '(' ) matchCar = ')'; else if( car == '{' ) matchCar = '}'; else if( car == '[' ) matchCar = ']'; else if( car == ')' ) { matchCar = '('; inc = -1; } else if( car == '}' ) { matchCar = '{'; inc = -1; } else if( car == ']' ) { matchCar = '['; inc = -1; } else { return; } m_matchingBegin = pos; int nb = 0; do { if( matchText.at( pos ) == car ) nb++; else if( matchText.at( pos ) == matchCar ) { nb--; if( nb == 0 ) { m_matchingEnd = pos; break; } } pos += inc; } while( pos >= 0 && pos < matchText.length() ); if( m_matchingBegin > m_matchingEnd ) qSwap(m_matchingBegin, m_matchingEnd ); return;}//void TextEdit::slotWordCompletion(QListWidgetItem *item){ m_completionList->hide(); if ( m_completionList->selectionMode() == QAbstractItemView::NoSelection ) { ensureCursorVisible(); setFocus( Qt::OtherFocusReason ); return; } QString signature = item->text(); Tag tag = item->data(Qt::UserRole).value<Tag>(); QString text = tag.name; wordUnderCursor(QPoint(), true); textCursor().insertText( text ); if ( m_completion && tag.signature.contains("(") && !tag.signature.contains("()") ) { completionHelp(); } if ( tag.signature.contains("(") && m_plainText.at( textCursor().position() ) != '(' ) { textCursor().insertText( "()" ); if ( !tag.signature.contains("()") ) { QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::PreviousCharacter); setTextCursor( cursor ); } } ensureCursorVisible(); setFocus( Qt::OtherFocusReason ); return;}//void TextEdit::keyPressEvent ( QKeyEvent * event ){ //m_editor->keyPress( event ); QTextCursor cursor = textCursor(); clearMatch(); setMouseHidden( true ); if ( event->key() == Qt::Key_Tab ) { slotIndent( !(event->modifiers() == Qt::ControlModifier) ); } else if ( m_completionList->isVisible() ) { if (event->key() == Qt::Key_Backspace && (m_plainText.left(textCursor().position()).right(1) == "." || m_plainText.left(textCursor().position()).right(1) == ">" || m_plainText.left(textCursor().position()).right(1) == ":")) { m_completionList->hide(); } else if ( m_autoCompletion && ( event->key() == '.' || ( event->key() == '>' && m_plainText.left(textCursor().position()).right(1) == "-" ) || ( event->key() == ':' && m_plainText.left(textCursor().position()).right(1) == ":" ) ) ) { QTextEdit::keyPressEvent ( event ); completeCode(); } else if ( event->key() == Qt::Key_Up ) { int row = m_completionList->currentRow(); if ( row > 0 ) m_completionList->setCurrentRow( row-1 ); } else if ( event->key() == Qt::Key_Down ) { int row = m_completionList->currentRow(); if ( row+1 < m_completionList->count() ) m_completionList->setCurrentRow( row+1 ); } else if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) slotWordCompletion( m_completionList->currentItem() ); else if ( QChar(event->key()).category() == QChar::Other_Control && event->key() != Qt::Key_Backspace ) { m_completionList->hide(); QTextEdit::keyPressEvent ( event ); } else { QTextEdit::keyPressEvent ( event ); QString s = wordUnderCursor(); QList<QListWidgetItem *> listeItems = m_completionList->findItems(s, Qt::MatchExactly); if ( listeItems.count()==1 ) { m_completionList->hide(); } else { listeItems = m_completionList->findItems(s, Qt::MatchStartsWith); if ( listeItems.count() ) m_completionList->setCurrentItem( listeItems.first() ); } } } else if ( m_autoCompletion && ( event->key() == '.' || ( event->key() == '>' && m_plainText.left(textCursor().position()).right(1) == "-" ) || ( event->key() == ':' && m_plainText.left(textCursor().position()).right(1) == ":" ) ) ) { QTextEdit::keyPressEvent ( event ); completeCode(); } else if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) { if ( m_autoindent ) { QTextEdit::keyPressEvent ( event ); autoIndent(); } else { QTextEdit::keyPressEvent ( event ); } } else if ( event->key() == Qt::Key_Home && ( !event->modifiers() || event->modifiers() == Qt::ShiftModifier ) ) { key_home( event->modifiers() == Qt::ShiftModifier ); } else if ( event->key() == Qt::Key_End && ( !event->modifiers() || event->modifiers() == Qt::ShiftModifier ) ) { key_end( event->modifiers() == Qt::ShiftModifier ); } else if ( m_autoindent && event->key() == '{' || event->key() == '}' ) { QTextEdit::keyPressEvent ( event ); autoUnindent(); if ( m_autobrackets && event->key() == '{' ) autobrackets(); } else if ( event->key() == '(' && m_completion ) { QTextEdit::keyPressEvent ( event ); completionHelp(); } else if ( event->key() == Qt::Key_Delete || event->key() == Qt::Key_Backspace ) { QTextEdit::keyPressEvent ( event ); } else if ( QKeySequence(event->key() | event->modifiers()) == m_mainImpl->shortcutCut() ) { cut(); } else if ( QKeySequence(event->key() | event->modifiers()) == m_mainImpl->shortcutPaste() ) { paste(); } else if ( QKeySequence(event->key() | event->modifiers()) == m_mainImpl->shortcutUndo() ) { QTextCursor cursor = textCursor(); document()->undo(&cursor); setTextCursor(cursor); } else if ( QKeySequence(event->key() | event->modifiers()) == m_mainImpl->shortcutRedo() ) { QTextCursor cursor = textCursor(); document()->redo(&cursor); setTextCursor(cursor); } else if ((event->key() == Qt::Key_Down) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))) { verticalScrollBar()->triggerAction( QAbstractSlider::SliderSingleStepAdd ); event->accept(); } else if ((event->key() == Qt::Key_Up) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))) { verticalScrollBar()->triggerAction( QAbstractSlider::SliderSingleStepSub ); event->accept(); } else { QTextEdit::keyPressEvent ( event ); } event->accept();}//void TextEdit::key_home(bool shift){ QTextCursor cursor = textCursor(); QTextBlock b = cursor.block(); QString s = b.text(); QTextCursor::MoveMode moveMode = (shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); int firstWord = 0, oldPos = cursor.columnNumber(); // save the old position, it's used later cursor.movePosition( QTextCursor::StartOfLine, moveMode ); while ( s.at(firstWord) == ' ' || s.at(firstWord) == '\t' ) { // while determining the first word, move the cursor to the right - if we encounter that it already was in front of the first word, it'll be moved back later ++firstWord; cursor.movePosition( QTextCursor::NextCharacter, moveMode ); } if (oldPos <= firstWord && oldPos > 0) // if the cursor was in front of the first word, move it to the beginning. However, if it was at the beginning of the line, let it where it is (first character) cursor.movePosition( QTextCursor::StartOfLine, moveMode ); setTextCursor( cursor );}//void TextEdit::key_end(bool shift){ QTextCursor cursor = textCursor(); QTextBlock b = cursor.block(); QString s = b.text(); QTextCursor::MoveMode moveMode = (shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); int lastWord, endOfLine, oldPos = cursor.columnNumber(); // save the old position, it's used later cursor.movePosition( QTextCursor::EndOfLine, moveMode ); lastWord = endOfLine = cursor.columnNumber()-1; while ( s.at(lastWord) == ' ' || s.at(lastWord) == '\t' ) { // while determining the last word, move the cursor to the right - if we encounter that it already was in front of the first word, it'll be moved back later --lastWord; cursor.movePosition( QTextCursor::PreviousCharacter, moveMode ); } if (oldPos >= lastWord && oldPos < endOfLine) // if the cursor was after the last word, move it to the end. However, if it was at the end of the line, let it where it is (last character) cursor.movePosition( QTextCursor::EndOfLine, moveMode ); setTextCursor( cursor );}//void TextEdit::textPlugin(TextEditInterface *iTextEdit){ QApplication::setOverrideCursor(Qt::WaitCursor); QTextCursor cursor = textCursor(); QString s = iTextEdit->text(m_plainText, cursor.selection().toPlainText()); if (s.isEmpty()) { QApplication::restoreOverrideCursor(); return; } if ( iTextEdit->action() == TextEditInterface::ReplaceAll ) { int posScrollbar = verticalScrollBar()->value(); int line = currentLineNumber(); setPlainText( s ); document()->setModified( true ); gotoLine(line, false); verticalScrollBar()->setValue( posScrollbar ); } else { cursor.insertText( s ); setTextCursor( cursor ); } QApplication::restoreOverrideCursor();}//void TextEdit::dropEvent( QDropEvent * event ){ int posScrollbar = verticalScrollBar()->value(); QString text; if ( event->mimeData()->hasText() ) { QTextCursor save = textCursor(); setTextCursor( cursorForPosition( QPoint( event->pos().x(), event->pos().y() ) ) ); text = event->mimeData()->text(); int linesAdded = 0; if ( text.length() ) linesAdded = text.count( QChar('\n') ); setTextCursor( save ); } QTextEdit::dropEvent( event ); if ( event->keyboardModifiers() == Qt::NoModifier ) { QTextCursor cursor = textCursor(); int pos = textCursor().position(); cursor.setPosition(pos-text.length(), QTextCursor::MoveAnchor); cursor.setPosition(pos, QTextCursor::KeepAnchor); setTextCursor( cursor ); } verticalScrollBar()->setValue( posScrollbar );}//void TextEdit::slotIndent(bool indenter){ setMouseHidden( true ); //string used to indent text QString indentString; if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); indentString.fill(' ', nbSpaces); } else { indentString = QString("\t"); } QTextCursor curseurActuel = textCursor();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -