在过去的几天里,我一直在努力将 QtVirtualKeyboard 包含在我的基于 QWidget 的应用程序中,该应用程序在具有 7 英寸触摸屏显示器的 Raspberry Pi 上运行。
这是我到目前为止所做的:
安装插件:
sudo apt-get install -y qtvirtualkeyboard-plugin
sudo apt-get install -y qml-module-qtquick-controls2
sudo apt-get install -y qtdeclarative5-dev
sudo apt-get install qml-module-qt-labs-folderlistmodel
添加QT_IM_MODULE
环境变量并将其设置为qtvirtualkeyboard
添加QT += quickwidgets
到我的 .pro
创建了一个QQuickWidget
来放置我的虚拟键盘。
。H
private:
QQuickWidget *m_quickWidget;
.cpp
// In constructor
QUrl source(QML_FILE_PATH + "virtualkeyboard.qml");
m_quickWidget->setSource(source);
m_quickWidget->setAttribute(Qt::WA_AcceptTouchEvents);
ui->verticalLayout->addWidget(m_quickWidget);
最后是我的 virtualkeyboard.qml 文件
import QtQuick 2.7
import QtQuick.VirtualKeyboard 2.1
Rectangle {
id: window
width: 600
height: 0
InputPanel {
id: inputPanel
width: window.width
states: State {
name: "visible"
when: inputPanel.active
PropertyChanges {
target: window
height: inputPanel.height
}
}
transitions: Transition {
from: ""
to: "visible"
reversible: true
ParallelAnimation {
NumberAnimation {
properties: "y"
duration: 250
easing.type: Easing.InOutQuad
}
}
}
}
}
所以到目前为止,从视觉上看,一切都很好。当我打开我的应用程序时,键盘小部件不可见(窗口高度:qml 中的 0),当我双击 QTableView 中的一个单元格(具有标志 Qt::ItemIsEnabled | Qt::ItemIsEditable)时,键盘小部件以正确的位置和大小显示在我的垂直布局的底部。
现在我的问题:
我遇到的主要问题是当我双击我的可编辑单元格时,我的键盘小部件出现并且我的单元格似乎仍然有焦点(在单击的单元格中可以看到闪烁的光标)。到目前为止,一切都运行良好。但是当我单击虚拟键盘上的按钮时,可编辑单元格失去焦点,键盘小部件关闭,并且我在应用程序控制台中收到此错误: 我的 Designer 表单中基本小部件的名称在
InputContext::sendKeyClick(): no focus to send key click - QGuiApplication::focusWindow() is: QWidgetWindow(0x1e68250, name="ConfigWindow")
哪里。ConfigWindow
我遇到的另一个较小但看似无法解决的问题是,只有在我双击 QTableView 中的单元格时才会打开键盘。这是一个奇怪的,因为我在我的设计师中设置
editTriggers
了。CurrentChanged
我知道这是可行的,因为如果我单击我的单元格,光标开始闪烁,如果我使用连接到我的树莓的物理键盘,我可以编辑文本。(当然,物理键盘仅在我的应用程序开发过程中可用,不会在成品中可用)。
我希望我已经足够清楚,但如果需要,我很乐意提供更多细节。
对于这些问题中的任何一个的任何帮助将不胜感激。
干杯。
编辑:我遇到的一些有用的链接: