10

我想为桌面应用程序创建一个屏幕键盘。该应用程序将在 Qt 5 中构建。我有几个问题,请澄清。

  1. QInputContextQt5中的替换是什么?(因为我通过实现在某处阅读了有关屏幕键盘的信息,QInputContext但 Qt 5 不支持此功能。)

  2. 我在哪里可以找到QPlatformInputContext并且QInputPanel(在互联网搜索中,我发现这两个是替代品,QInputContext但不确定,而且我也找不到它们)?

我的要求:

  1. 键盘不会使用 QML 或任何外部库(已构建其他键盘)。

  2. 键盘将使用 Qt Gui(传统)。

4

5 回答 5

4

我知道您将面临两个挑战:

  1. 根据焦点在文本小部件上,获得有关何时显示/隐藏屏幕键盘的通知
  2. 如何将按键事件发布到文本小部件

回答

  1. 至于前者,您可以QObject::InstallEventFilter()在要为其提供键盘服务的小部件上使用。然后,您可以mouseReleaseEvent在链接中查找 Qt 代码的行。
  2. 这可以通过使用来实现QCoreApplication::postEvent()

至于,请在此处获取Qt 虚拟键盘QPlatformInputContext的示例。

于 2013-09-26T06:43:59.010 回答
3

我花了很长时间才知道如何在没有 qml 和太多工作的情况下在 QT5 中做到这一点。所以想我会分享:

#include <QCoreApplication>
#include <QGuiApplication>
#include <QKeyEvent>

void MainWindow::on_pushButton_clicked()
{
   Qt::Key key = Qt::Key_1;;

   QKeyEvent pressEvent = QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier, QKeySequence(key).toString());
   QKeyEvent releaseEvent = QKeyEvent(QEvent::KeyRelease, key, Qt::NoModifier);
   QCoreApplication::sendEvent(QGuiApplication::focusObject(), &pressEvent);
   QCoreApplication::sendEvent(QGuiApplication::focusObject(), &releaseEvent);
}

这里的线索是,通过单击按钮(如果您要手动制作键盘),向当前具有焦点的对象(例如文本框)启动发送事件。您当然可以对文本框进行硬编码,但这仅在您只有一个输入可使用键盘时才有效。

您必须确保的最后一件事是将键盘按钮的 focusPolicy 设置为 NoFocus,以防止在按下键盘时焦点移动。

学分转到https://www.wisol.ch/w/articles/2015-07-26-virtual-keyboard-qt/

希望这可以帮助某人。

于 2017-07-27T13:09:27.610 回答
2

这里给出了一个很好的例子http://tolszak-dev.blogspot.com.tr/2013/04/qplatforminputcontext-and-virtual.html 使用 Qt Quick 屏幕键盘。你可以检查一下。

于 2015-01-23T20:53:59.137 回答
1

我刚刚在我很棒的 Qt 应用程序中完成了这个工作。这是我的做法。

对于 Android 和 iOS:

QObject::connect(lineEdit, SIGNAL(returnPressed()), qApp->inputMethod(), SLOT(hide()));

对于 iOS:

子类 QLineEdit 并添加以下内容:

void focusOutEvent(QFocusEvent * fe)
{
    QLineEdit::focusOutEvent(fe);
#ifdef Q_OS_IOS
    if(fe->reason() == Qt::OtherFocusReason)
    {
        // Done was pressed!
        emit returnPressed();
    }
#endif
}

顺便说一句,QInputMethod 文档并没有说明如何从 C++ 访问它。你必须从 QGuiApplication 中获取一个实例,就像我在上面所做的那样。

希望有帮助。

于 2014-09-07T06:38:32.650 回答
1

Qt 现在在 Qt 5.5 中提供了一个虚拟键盘框架。

http://doc.qt.io/QtVirtualKeyboard/

我没有尝试过,所以我不能说它是多么容易使用。看起来它是基于 QML 的。

(它说它适用于 Linux 和 boot2qt,但也可以根据构建页面(http://doc.qt.io/QtVirtualKeyboard/build.html)为 Windows 构建)

于 2015-12-08T21:41:37.750 回答