diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-12-30 10:44:10 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-13 18:09:58 +0000 |
commit | 24d06e7ab56bd8f0262d4135207adee20befc7c1 (patch) | |
tree | 1c5d2e8a43cc6d9dba68a0d63b0743a0e80f8ee6 | |
parent | 1a4346d11224243b39da991585738d74fd03a98f (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.cpp | 1 | ||||
-rw-r--r-- | src/quick/items/qquicktextcontrol.cpp | 17 | ||||
-rw-r--r-- | src/quick/items/qquicktextcontrol_p.h | 3 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 14 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit_p.h | 4 | ||||
-rw-r--r-- | tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp | 17 |
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() |