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

📄 qtextcontrol.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        setClipboardSelection();#endif    }    repaintOldAndNewSelection(oldSelection);    cursorIsFocusIndicator = false;    selectedWordOnDoubleClick = cursor;    trippleClickPoint = pos;    trippleClickTimer.start(qApp->doubleClickInterval(), q);}void QTextControlPrivate::contextMenuEvent(const QPoint &screenPos, const QPointF &docPos, QWidget *contextWidget){#ifdef QT_NO_CONTEXTMENU    Q_UNUSED(screenPos);    Q_UNUSED(docPos);    Q_UNUSED(contextWidget);#else    Q_Q(QTextControl);    if (!hasFocus)        return;    QMenu *menu = q->createStandardContextMenu(docPos, contextWidget);    if (!menu)        return;    menu->exec(screenPos);    delete menu;#endif}bool QTextControlPrivate::dragEnterEvent(QEvent *e, const QMimeData *mimeData){    Q_Q(QTextControl);    if (!(interactionFlags & Qt::TextEditable) || !q->canInsertFromMimeData(mimeData)) {        e->ignore();        return false;    }    dndFeedbackCursor = QTextCursor();    return true; // accept proposed action}void QTextControlPrivate::dragLeaveEvent(){    Q_Q(QTextControl);    const QRectF crect = q->cursorRect(dndFeedbackCursor);    dndFeedbackCursor = QTextCursor();    if (crect.isValid())        emit q->updateRequest(crect);}bool QTextControlPrivate::dragMoveEvent(QEvent *e, const QMimeData *mimeData, const QPointF &pos){    Q_Q(QTextControl);    if (!(interactionFlags & Qt::TextEditable) || !q->canInsertFromMimeData(mimeData)) {        e->ignore();        return false;    }    const int cursorPos = doc->documentLayout()->hitTest(pos, Qt::FuzzyHit);    if (cursorPos != -1) {        QRectF crect = q->cursorRect(dndFeedbackCursor);        if (crect.isValid())            emit q->updateRequest(crect);        dndFeedbackCursor = cursor;        dndFeedbackCursor.setPosition(cursorPos);        crect = q->cursorRect(dndFeedbackCursor);        emit q->updateRequest(crect);    }    return true; // accept proposed action}bool QTextControlPrivate::dropEvent(const QMimeData *mimeData, const QPointF &pos, Qt::DropAction dropAction, QWidget *source){    Q_Q(QTextControl);    dndFeedbackCursor = QTextCursor();    if (!(interactionFlags & Qt::TextEditable) || !q->canInsertFromMimeData(mimeData))        return false;    repaintSelection();    QTextCursor insertionCursor = q->cursorForPosition(pos);    insertionCursor.beginEditBlock();    if (dropAction == Qt::MoveAction && source == contextWidget)        cursor.removeSelectedText();    cursor = insertionCursor;    q->insertFromMimeData(mimeData);    insertionCursor.endEditBlock();    q->ensureCursorVisible();    return true; // accept proposed action}void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e){    if (!(interactionFlags & Qt::TextEditable) || cursor.isNull()) {        e->ignore();        return;    }    cursor.beginEditBlock();    cursor.removeSelectedText();    // insert commit string    if (!e->commitString().isEmpty() || e->replacementLength()) {        QTextCursor c = cursor;        c.setPosition(c.position() + e->replacementStart());        c.setPosition(c.position() + e->replacementLength(), QTextCursor::KeepAnchor);        c.insertText(e->commitString());    }    QTextBlock block = cursor.block();    QTextLayout *layout = block.layout();    layout->setPreeditArea(cursor.position() - block.position(), e->preeditString());    QList<QTextLayout::FormatRange> overrides;    preeditCursor = e->preeditString().length();    hideCursor = false;    for (int i = 0; i < e->attributes().size(); ++i) {        const QInputMethodEvent::Attribute &a = e->attributes().at(i);        if (a.type == QInputMethodEvent::Cursor) {            preeditCursor = a.start;            hideCursor = !a.length;        } else if (a.type == QInputMethodEvent::TextFormat) {            QTextCharFormat f = qvariant_cast<QTextFormat>(a.value).toCharFormat();            if (f.isValid()) {                QTextLayout::FormatRange o;                o.start = a.start + cursor.position() - block.position();                o.length = a.length;                o.format = f;                overrides.append(o);            }        }    }    layout->setAdditionalFormats(overrides);    cursor.endEditBlock();}QVariant QTextControl::inputMethodQuery(Qt::InputMethodQuery property) const{    Q_D(const QTextControl);    QTextBlock block = d->cursor.block();    switch(property) {    case Qt::ImMicroFocus:        return cursorRect();    case Qt::ImFont:        return QVariant(d->cursor.charFormat().font());    case Qt::ImCursorPosition:        return QVariant(d->cursor.position() - block.position());    case Qt::ImSurroundingText:        return QVariant(block.text());    case Qt::ImCurrentSelection:        return QVariant(d->cursor.selectedText());    default:        return QVariant();    }}void QTextControl::setFocus(bool focus, Qt::FocusReason reason){    QFocusEvent ev(focus ? QEvent::FocusIn : QEvent::FocusOut,                   reason);    processEvent(&ev);}void QTextControlPrivate::focusEvent(QFocusEvent *e){    Q_Q(QTextControl);    emit q->updateRequest(q->selectionRect());    if (e->gotFocus()) {#ifdef QT_KEYPAD_NAVIGATION        if (!QApplication::keypadNavigationEnabled() || (hasEditFocus && e->reason() == Qt::PopupFocusReason)) {#endif        cursorOn = (interactionFlags & Qt::TextSelectableByKeyboard);        if (interactionFlags & Qt::TextEditable) {            setBlinkingCursorEnabled(true);        }#ifdef QT_KEYPAD_NAVIGATION        }#endif    } else {        setBlinkingCursorEnabled(false);        if (interactionFlags & Qt::LinksAccessibleByKeyboard            && e->reason() != Qt::ActiveWindowFocusReason            && e->reason() != Qt::PopupFocusReason            && cursor.hasSelection()) {            cursor.clearSelection();        }    }    hasFocus = e->gotFocus();}QString QTextControlPrivate::anchorForCursor(const QTextCursor &anchorCursor) const{    if (anchorCursor.hasSelection()) {        QTextCursor cursor = anchorCursor;        if (cursor.selectionStart() != cursor.position())            cursor.setPosition(cursor.selectionStart());        cursor.movePosition(QTextCursor::NextCharacter);        QTextCharFormat fmt = cursor.charFormat();        if (fmt.isAnchor() && fmt.hasProperty(QTextFormat::AnchorHref))            return fmt.stringProperty(QTextFormat::AnchorHref);    }    return QString();}#ifdef QT_KEYPAD_NAVIGATIONvoid QTextControlPrivate::editFocusEvent(QEvent *e){    Q_Q(QTextControl);    if (QApplication::keypadNavigationEnabled()) {        if (e->type() == QEvent::EnterEditFocus && interactionFlags & Qt::TextEditable) {            const QTextCursor oldSelection = cursor;            const int oldCursorPos = cursor.position();            const bool moved = cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);            q->ensureCursorVisible();            if (moved) {                if (cursor.position() != oldCursorPos)                    emit q->cursorPositionChanged();                emit q->microFocusChanged();            }            selectionChanged();            repaintOldAndNewSelection(oldSelection);            setBlinkingCursorEnabled(true);        } else            setBlinkingCursorEnabled(false);    }    hasEditFocus = e->type() == QEvent::EnterEditFocus ? true : false;}#endif#ifndef QT_NO_CONTEXTMENUQMenu *QTextControl::createStandardContextMenu(const QPointF &pos, QWidget *parent){    Q_D(QTextControl);    const bool showTextSelectionActions = d->interactionFlags & (Qt::TextEditable | Qt::TextSelectableByKeyboard | Qt::TextSelectableByMouse);    d->linkToCopy = QString();    if (!pos.isNull())        d->linkToCopy = anchorAt(pos);    if (d->linkToCopy.isEmpty() && !showTextSelectionActions)        return 0;    QMenu *menu = new QMenu(parent);    QAction *a;    if (d->interactionFlags & Qt::TextEditable) {        QString text = tr("&Undo");        a = menu->addAction(tr("&Undo") + ACCEL_KEY(QKeySequence::Undo), this, SLOT(undo()));        a->setEnabled(d->doc->isUndoAvailable());        a = menu->addAction(tr("&Redo") + ACCEL_KEY(QKeySequence::Redo), this, SLOT(redo()));        a->setEnabled(d->doc->isRedoAvailable());        menu->addSeparator();        a = menu->addAction(tr("Cu&t") + ACCEL_KEY(QKeySequence::Cut), this, SLOT(cut()));        a->setEnabled(d->cursor.hasSelection());    }    if (showTextSelectionActions) {        a = menu->addAction(tr("&Copy") + ACCEL_KEY(QKeySequence::Copy), this, SLOT(copy()));        a->setEnabled(d->cursor.hasSelection());    }    if ((d->interactionFlags & Qt::LinksAccessibleByKeyboard)            || (d->interactionFlags & Qt::LinksAccessibleByMouse)) {        a = menu->addAction(tr("Copy &Link Location"), this, SLOT(_q_copyLink()));        a->setEnabled(!d->linkToCopy.isEmpty());    }    if (d->interactionFlags & Qt::TextEditable) {#if !defined(QT_NO_CLIPBOARD)        a = menu->addAction(tr("&Paste") + ACCEL_KEY(QKeySequence::Paste), this, SLOT(paste()));        a->setEnabled(canPaste());#endif        a = menu->addAction(tr("Delete"), this, SLOT(_q_deleteSelected()));        a->setEnabled(d->cursor.hasSelection());    }    if (showTextSelectionActions) {        menu->addSeparator();        a = menu->addAction(tr("Select All") + ACCEL_KEY(QKeySequence::SelectAll), this, SLOT(selectAll()));        a->setEnabled(!d->doc->isEmpty());    }    if (d->interactionFlags & Qt::TextEditable) {        menu->addSeparator();        QUnicodeControlCharacterMenu *ctrlCharacterMenu = new QUnicodeControlCharacterMenu(this, menu);        menu->addMenu(ctrlCharacterMenu);    }    return menu;}#endif // QT_NO_CONTEXTMENUQTextCursor QTextControl::cursorForPosition(const QPointF &pos) const{    Q_D(const QTextControl);    int cursorPos = d->doc->documentLayout()->hitTest(pos, Qt::FuzzyHit);    if (cursorPos == -1)        cursorPos = 0;    QTextCursor c(d->doc);    c.setPosition(cursorPos);    return c;}QRectF QTextControl::cursorRect(const QTextCursor &cursor) const{    Q_D(const QTextControl);    if (cursor.isNull())        return QRectF();   return d->rectForPosition(cursor.position());}QRectF QTextControl::cursorRect() const{    Q_D(const QTextControl);    return cursorRect(d->cursor);}QString QTextControl::anchorAt(const QPointF &pos) const{    Q_D(const QTextControl);    return d->doc->documentLayout()->anchorAt(pos);}QString QTextControl::anchorAtCursor() const{    Q_D(const QTextControl);    return d->anchorForCursor(d->cursor);}bool QTextControl::overwriteMode() const{    Q_D(const QTextControl);    return d->overwriteMode;}void QTextControl::setOverwriteMode(bool overwrite){    Q_D(QTextControl);    d->overwriteMode = overwrite;}int QTextControl::cursorWidth() const{#ifndef QT_NO_PROPERTIES    Q_D(const QTextControl);    return d->doc->documentLayout()->property("cursorWidth").toInt();#else    return 1;#endif}void QTextControl::setCursorWidth(int width){    Q_D(QTextControl);#ifdef QT_NO_PROPERTIES    Q_UNUSED(width);#else    d->doc->documentLayout()->setProperty("cursorWidth", width);#endif    d->repaintCursor();}bool QTextControl::acceptRichText() const{    Q_D(const QTextControl);    return d->acceptRichText;}void QTextControl::setAcceptRichText(bool accept){    Q_D(QTextControl);    d->acceptRichText = accept;}#ifndef QT_NO_TEXTEDITvoid QTextControl::setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections){    Q_D(QTextControl);    if (selections.count() == d->extraSelections.count()) {        bool needUpdate = false;        for (int i = 0; i < selections.count(); ++i)            if (selections.at(i).cursor.position() != d->extraSelections.at(i).cursor.position()                || selections.at(i).cursor.anchor() != d->extraSelections.at(i).cursor.anchor()          

⌨️ 快捷键说明

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