我最近几天一直在尝试将QtVirtualKeyboard添加到我的基于QWidget的应用程序中,在树莓派上运行,并使用7英寸触摸屏显示器。
目前为止,我做了以下工作:
安装了插件:
添加了
.h
最后是我的 virtualkeyboard.qml 文件。
到目前为止,视觉上看起来一切都很好。当我打开我的应用程序时,键盘小部件不可见(在qml中窗口高度为0),当我双击QTableView中的单元格(具有Qt ::ItemIsEnabled | Qt ::ItemIsEditable标志)时,键盘小部件会出现在垂直布局底部的正确位置和大小。
我还遇到另一个较小但看起来无法解决的问题是,键盘只在我双击 QTableView 中的单元格时才打开。这很奇怪,因为我在设计器中将
我希望我的表述已经足够清晰,如果需要的话,我很乐意提供更多细节。
非常感谢对这些问题的任何帮助。
干杯。
编辑: 我遇到了一些有用的链接: 在QQuickWidget中使用Qt虚拟键盘 根据QObject调整qtvirtualkeyboard大小 Qt虚拟键盘
目前为止,我做了以下工作:
安装了插件:
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
在我的.pro文件中添加了QT += quickwidgets
创建了一个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标志)时,键盘小部件会出现在垂直布局底部的正确位置和大小。
现在来谈谈我的问题:
我遇到的主要问题是,当我双击可编辑单元格时,我的键盘小部件显示出来,而且单元格似乎仍然有焦点(点击的单元格中会出现闪烁的光标)。到目前为止一切都正常。但是,当我在虚拟键盘上点击一个按钮时,可编辑单元格失去焦点,键盘小部件关闭,我在应用程序控制台中得到以下错误信息:InputContext::sendKeyClick(): no focus to send key click - QGuiApplication::focusWindow() is: QWidgetWindow(0x1e68250, name="ConfigWindow")
其中 ConfigWindow
是我设计表单中基本窗口的名称。我还遇到另一个较小但看起来无法解决的问题是,键盘只在我双击 QTableView 中的单元格时才打开。这很奇怪,因为我在设计器中将
editTriggers
设置为 CurrentChanged
。我知道这有效,因为如果我单击单元格,光标开始闪烁,如果我使用与我的树莓派连接的物理键盘,我可以编辑文本。(当然,在开发应用程序期间,物理键盘只能用于测试,在完成的产品中不可用)。我希望我的表述已经足够清晰,如果需要的话,我很乐意提供更多细节。
非常感谢对这些问题的任何帮助。
干杯。
编辑: 我遇到了一些有用的链接: 在QQuickWidget中使用Qt虚拟键盘 根据QObject调整qtvirtualkeyboard大小 Qt虚拟键盘