From 7fc7481cfb204bfd16f6ed989737e535eefe80dc Mon Sep 17 00:00:00 2001 From: Le Tan Date: Sat, 24 Jul 2021 15:31:11 +0800 Subject: [PATCH] disable input method in QuickSelector --- src/widgets/lineedit.cpp | 23 +++++++++++++++++++++++ src/widgets/lineedit.h | 8 ++++++++ src/widgets/quickselector.cpp | 3 ++- src/widgets/quickselector.h | 5 +++-- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/widgets/lineedit.cpp b/src/widgets/lineedit.cpp index e08a6f26..780957ec 100644 --- a/src/widgets/lineedit.cpp +++ b/src/widgets/lineedit.cpp @@ -2,6 +2,8 @@ #include #include +#include +#include #include @@ -98,3 +100,24 @@ void LineEdit::selectBaseName(QLineEdit *p_lineEdit) int dotIndex = name.lastIndexOf('.'); p_lineEdit->setSelection(0, (dotIndex == -1) ? name.size() : dotIndex); } + +QVariant LineEdit::inputMethodQuery(Qt::InputMethodQuery p_query) const +{ + if (p_query == Qt::ImEnabled) { + return m_inputMethodEnabled; + } + + return QLineEdit::inputMethodQuery(p_query); +} + +void LineEdit::setInputMethodEnabled(bool p_enabled) +{ + if (m_inputMethodEnabled != p_enabled) { + m_inputMethodEnabled = p_enabled; + + QInputMethod *im = QGuiApplication::inputMethod(); + im->reset(); + // Ask input method to query current state, which will call inputMethodQuery(). + im->update(Qt::ImEnabled); + } +} diff --git a/src/widgets/lineedit.h b/src/widgets/lineedit.h index 321b62dd..e98ed647 100644 --- a/src/widgets/lineedit.h +++ b/src/widgets/lineedit.h @@ -14,10 +14,18 @@ namespace vnotex LineEdit(const QString &p_contents, QWidget *p_parent = nullptr); + QVariant inputMethodQuery(Qt::InputMethodQuery p_query) const Q_DECL_OVERRIDE; + + void setInputMethodEnabled(bool p_enabled); + static void selectBaseName(QLineEdit *p_lineEdit); protected: void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; + + private: + // Whether enable input method. + bool m_inputMethodEnabled = true; }; } diff --git a/src/widgets/quickselector.cpp b/src/widgets/quickselector.cpp index 79792b33..5fd8de8e 100644 --- a/src/widgets/quickselector.cpp +++ b/src/widgets/quickselector.cpp @@ -72,7 +72,8 @@ void QuickSelector::setupUI(const QString &p_title) mainLayout->addWidget(new QLabel(p_title, this)); } - m_searchLineEdit = WidgetsFactory::createLineEdit(this); + m_searchLineEdit = dynamic_cast(WidgetsFactory::createLineEdit(this)); + m_searchLineEdit->setInputMethodEnabled(false); connect(m_searchLineEdit, &QLineEdit::textEdited, this, &QuickSelector::searchAndFilter); mainLayout->addWidget(m_searchLineEdit); diff --git a/src/widgets/quickselector.h b/src/widgets/quickselector.h index 38b11f3f..cd916eef 100644 --- a/src/widgets/quickselector.h +++ b/src/widgets/quickselector.h @@ -6,12 +6,13 @@ #include #include -class QLineEdit; class QListWidget; class QListWidgetItem; namespace vnotex { + class LineEdit; + struct QuickSelectorItem { QuickSelectorItem() = default; @@ -63,7 +64,7 @@ namespace vnotex QVector m_items; - QLineEdit *m_searchLineEdit = nullptr; + LineEdit *m_searchLineEdit = nullptr; QListWidget *m_itemList = nullptr;