У меня есть документ 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();
}
TextArea {
// Layout information removed for brevity
id: textArea,
textFormat:TextEdit.RichText
}