aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-12-30 10:44:10 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-01-13 18:09:58 +0000
commit24d06e7ab56bd8f0262d4135207adee20befc7c1 (patch)
tree1c5d2e8a43cc6d9dba68a0d63b0743a0e80f8ee6
parent1a4346d11224243b39da991585738d74fd03a98f (diff)
QQuickTextEdit: added preeditText property
Task-number: QTBUG-49503 Change-Id: I3390e72893e4125e00e8e0835a8d2fae11ea276f Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
-rw-r--r--src/quick/items/qquickitemsmodule.cpp1
-rw-r--r--src/quick/items/qquicktextcontrol.cpp17
-rw-r--r--src/quick/items/qquicktextcontrol_p.h3
-rw-r--r--src/quick/items/qquicktextedit.cpp14
-rw-r--r--src/quick/items/qquicktextedit_p.h4
-rw-r--r--tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp17
6 files changed, 55 insertions, 1 deletions
diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp
index 3fa889c80c..d511ebcc30 100644
--- a/src/quick/items/qquickitemsmodule.cpp
+++ b/src/quick/items/qquickitemsmodule.cpp
@@ -278,6 +278,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor)
qmlRegisterType<QQuickListView, 7>(uri, 2, 7, "ListView");
qmlRegisterType<QQuickGridView, 7>(uri, 2, 7, "GridView");
qmlRegisterType<QQuickTextInput, 7>(uri, 2, 7, "TextInput");
+ qmlRegisterType<QQuickTextEdit, 7>(uri, 2, 7, "TextEdit");
}
static void initResources()
diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp
index d0678b4278..d3e858c67f 100644
--- a/src/quick/items/qquicktextcontrol.cpp
+++ b/src/quick/items/qquicktextcontrol.cpp
@@ -1321,8 +1321,10 @@ void QQuickTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
QTextBlock block = cursor.block();
QTextLayout *layout = block.layout();
- if (isGettingInput)
+ if (isGettingInput) {
layout->setPreeditArea(cursor.position() - block.position(), e->preeditString());
+ emit q->preeditTextChanged();
+ }
QVector<QTextLayout::FormatRange> overrides;
const int oldPreeditCursor = preeditCursor;
preeditCursor = e->preeditString().length();
@@ -1756,6 +1758,19 @@ QRectF QQuickTextControl::blockBoundingRect(const QTextBlock &block) const
return d->doc->documentLayout()->blockBoundingRect(block);
}
+QString QQuickTextControl::preeditText() const
+{
+#ifndef QT_NO_IM
+ Q_D(const QQuickTextControl);
+ QTextLayout *layout = d->cursor.block().layout();
+ if (!layout)
+ return QString();
+
+ return layout->preeditAreaText();
+#else
+ return QString();
+#endif
+}
QStringList QQuickTextEditMimeData::formats() const
diff --git a/src/quick/items/qquicktextcontrol_p.h b/src/quick/items/qquicktextcontrol_p.h
index c5f1bef067..146201eb70 100644
--- a/src/quick/items/qquicktextcontrol_p.h
+++ b/src/quick/items/qquicktextcontrol_p.h
@@ -114,6 +114,8 @@ public:
virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const;
virtual QRectF blockBoundingRect(const QTextBlock &block) const;
+ QString preeditText() const;
+
public Q_SLOTS:
void setPlainText(const QString &text);
void setHtml(const QString &text);
@@ -131,6 +133,7 @@ public Q_SLOTS:
Q_SIGNALS:
void textChanged();
+ void preeditTextChanged();
void contentsChange(int from, int charsRemoved, int charsAdded);
void undoAvailable(bool b);
void redoAvailable(bool b);
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 8282c09770..0535bc4e6b 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -351,6 +351,19 @@ void QQuickTextEdit::setText(const QString &text)
}
/*!
+ \qmlproperty string QtQuick::TextEdit::preeditText
+ \readonly
+ \since 5.7
+
+ This property contains partial text input from an input method.
+*/
+QString QQuickTextEdit::preeditText() const
+{
+ Q_D(const QQuickTextEdit);
+ return d->control->preeditText();
+}
+
+/*!
\qmlproperty enumeration QtQuick::TextEdit::textFormat
The way the text property should be displayed.
@@ -2166,6 +2179,7 @@ void QQuickTextEditPrivate::init()
qmlobject_connect(control, QQuickTextControl, SIGNAL(linkActivated(QString)), q, QQuickTextEdit, SIGNAL(linkActivated(QString)));
qmlobject_connect(control, QQuickTextControl, SIGNAL(linkHovered(QString)), q, QQuickTextEdit, SIGNAL(linkHovered(QString)));
qmlobject_connect(control, QQuickTextControl, SIGNAL(textChanged()), q, QQuickTextEdit, SLOT(q_textChanged()));
+ qmlobject_connect(control, QQuickTextControl, SIGNAL(preeditTextChanged()), q, QQuickTextEdit, SIGNAL(preeditTextChanged()));
#ifndef QT_NO_CLIPBOARD
qmlobject_connect(QGuiApplication::clipboard(), QClipboard, SIGNAL(dataChanged()), q, QQuickTextEdit, SLOT(q_canPasteChanged()));
#endif
diff --git a/src/quick/items/qquicktextedit_p.h b/src/quick/items/qquicktextedit_p.h
index de72071319..e222f497e3 100644
--- a/src/quick/items/qquicktextedit_p.h
+++ b/src/quick/items/qquicktextedit_p.h
@@ -103,6 +103,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTextEdit : public QQuickImplicitSizeItem
Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged REVISION 6)
Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged REVISION 6)
Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged REVISION 6)
+ Q_PROPERTY(QString preeditText READ preeditText NOTIFY preeditTextChanged REVISION 7)
public:
QQuickTextEdit(QQuickItem *parent=0);
@@ -151,6 +152,8 @@ public:
QString text() const;
void setText(const QString &);
+ Q_REVISION(7) QString preeditText() const;
+
TextFormat textFormat() const;
void setTextFormat(TextFormat format);
@@ -285,6 +288,7 @@ public:
Q_SIGNALS:
void textChanged();
+ Q_REVISION(7) void preeditTextChanged();
void contentSizeChanged();
void cursorPositionChanged();
void cursorRectangleChanged();
diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
index 7f454aaa11..f71168412b 100644
--- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
+++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
@@ -3039,6 +3039,23 @@ void tst_qquicktextedit::textInput()
edit->setReadOnly(true);
QGuiApplication::sendEvent(edit, &queryEvent);
QCOMPARE(queryEvent.value(Qt::ImEnabled).toBool(), false);
+
+ edit->setReadOnly(false);
+
+ QInputMethodEvent preeditEvent("PREEDIT", QList<QInputMethodEvent::Attribute>());
+ QGuiApplication::sendEvent(edit, &preeditEvent);
+ QCOMPARE(edit->text(), QString("Hello world!"));
+ QCOMPARE(edit->preeditText(), QString("PREEDIT"));
+
+ QInputMethodEvent preeditEvent2("PREEDIT2", QList<QInputMethodEvent::Attribute>());
+ QGuiApplication::sendEvent(edit, &preeditEvent2);
+ QCOMPARE(edit->text(), QString("Hello world!"));
+ QCOMPARE(edit->preeditText(), QString("PREEDIT2"));
+
+ QInputMethodEvent preeditEvent3("", QList<QInputMethodEvent::Attribute>());
+ QGuiApplication::sendEvent(edit, &preeditEvent3);
+ QCOMPARE(edit->text(), QString("Hello world!"));
+ QCOMPARE(edit->preeditText(), QString(""));
}
void tst_qquicktextedit::inputMethodUpdate()