Qt 5.4, QML TextArea отображает QTextCharFormat :: AlignSuperScript неправильно

У меня есть документ QML, который содержит TextArea и несколько кнопок (по сути, Rich Text Editor). Все отлично работает (полужирный, курсив, подчеркивание и т. Д.), Но не надстрочный. Надстрочный текст просто уменьшается, но не поднимается. Пожалуйста, посмотрите на следующий код, я что-то упустил?


Код QML:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.3

Item {
id: root
width: 600
height: 300

Row {
//Layout information removed for brevity
Button {
//Layout information removed for brevity
id: buttonSuperscript
text: qsTr("Sup")
checkable: true
onClicked: TextEditorBackEnd.superscript(textArea)
}
}

TextArea {
//Layout information removed for brevity
id: textArea
}
}

Код C ++ (класс TextEditorBackEnd):

    void TextEditorBackEnd::superscript(QQuickItem *target)
{
QTextCursor cursor = getCursor(target);

QTextCharFormat format;

if(cursor.charFormat().verticalAlignment() == QTextCharFormat::AlignSuperScript)
{
format.setVerticalAlignment(QTextCharFormat::AlignNormal);
}

else
{
format.setVerticalAlignment(QTextCharFormat::AlignSuperScript);
}

cursor.mergeCharFormat(format);
}

QTextCursor TextEditorBackEnd::getCursor(QQuickItem *target)
{
QTextCursor cursor = QTextCursor(target->property("textDocument").value<QQuickTextDocument*>()->textDocument());

int selectionStart = target->property("selectionStart").toInt();
int selectionEnd = target->property("selectionEnd").toInt();
int cursorPosition = target->property("cursorPosition").toInt();

if(selectionStart != selectionEnd)
{
cursor.setPosition(selectionStart);
cursor.setPosition(selectionEnd, QTextCursor::KeepAnchor);
}

else
{
cursor.setPosition(cursorPosition);
}

if(!cursor.hasSelection())
{
cursor.select(QTextCursor::WordUnderCursor);
}

return cursor;
}

Код C ++ (класс TextEditorBackEnd):

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

#include "filesystemhelper.h"#include "texteditorbackend.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

FileSystemHelper fileSystemHelper;
TextEditorBackEnd textEditorBackEnd;

QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("FileSystemHelper", &fileSystemHelper);
engine.rootContext()->setContextProperty("TextEditorBackEnd", &textEditorBackEnd);
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));

return app.exec();
}

0

Решение

TextArea {
// Layout information removed for brevity
id: textArea,
textFormat:TextEdit.RichText
}
0

Другие решения


По вопросам рекламы [email protected]