Удалить/удалить/заменить выделенный текст в QGraphicsTextItem

Я хотел бы удалить выделенный текст внутри QGraphicsTextItem.

Я искал все классы, которые он использует, например QTextCursor, QTextDocument... Я не могу найти ничего для удаления текста, кроме функции clear() из QTextDocument, которая удаляет все...

Как снять выделение?

    QTextCursor _cursor = textCursor();
    if(_cursor.hasSelection())
        ?

В качестве альтернативы (поскольку мне это нужно для пользовательской команды вставки), как я могу заменить выделение существующим текстом или html?

    QClipboard* _clipboard = QApplication::clipboard();
    const QMimeData* _mimeData = _clipboard->mimeData();
    if (_mimeData->hasHtml())
    {
        QTextCursor _cursor = textCursor();
        if(_cursor.hasSelection())
             ?
        _cursor.insertHtml(_mimeData->html());
    }

person Thalia    schedule 30.09.2015    source источник


Ответы (1)


Не работает QTextCursor::removeSelectedText()?

В следующем примере у нас есть в начале текст QGraphics Text Item 1, но, как вы увидите, мы можем получить QTextDocument, а также QTextCursor для этого документа и вставить несколько слов.

После этого подводим курсор к следующему слову. Наконец, мы выделяем слово под курсором (Text) и удаляем его из нашего QGraphicsTextItem.

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsTextItem>
#include <QTextCursor>
#include <QTextDocument>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsScene scene;
    QGraphicsView view(&scene);

    QGraphicsTextItem* item_1  = new QGraphicsTextItem("QGraphics Text Item 1");
    item_1->setTextInteractionFlags(Qt::TextEditorInteraction);

    QTextDocument* doc = item_1->document();

    scene.addItem(item_1);

    QTextCursor cursor(doc);
    cursor.beginEditBlock();
    cursor.insertText(" Hello ");
    cursor.insertText(" World ");
    cursor.endEditBlock();
    cursor.movePosition(QTextCursor::NextWord);
    cursor.select(QTextCursor::WordUnderCursor);
    cursor.removeSelectedText();

    view.setFixedSize(640, 480);
    view.show();
    return a.exec();
}
person Tarod    schedule 01.10.2015