- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 qml qt 虚拟键盘:https://github.com/qt/qtvirtualkeyboard
我正在尝试将它与我基于小部件的 Qt 应用程序的其余部分“连接”起来。例如,当我单击 QLineEdit 时,我希望键盘显示出来并在应用程序上下文中充当物理键盘。
为此,我安装了 qtvirtualkeyboard/src(qmake && make && make install)中的内容,这是我的 main.cpp :
#include <QQuickView>
#include <QApplication>
#include <QQmlEngine>
#include <QQmlContext>
int main(int argc, char *argv[]){
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
QApplication app(argc, argv);
MainWindow w(); // This is a QWidget / QMainWindow
w.setFixedSize(800, 480);
w.show();
return app.exec();
}
当我在我的桌面上执行此操作时,尽管我的应用程序是 800x480,但键盘占据了我屏幕的一半。
当我在带有 7"触摸屏的 Raspberry Pi 上执行它时,键盘占据了页面的一半,顶部出现黑色边框。
我想自己修复键盘大小。当我创建带有项目等的 QML 文件时,键盘不再显示。
最佳答案
在过去一个月左右的时间里,我一直在与 QtVirtualKeyboard 怪物搏斗。希望您能从我的反复试验中受益。
要知道/记住的是,基本上有四个独立的部分来通知键盘的整体功能和实现:
如果您使用的是 qtvirtualkeyboard 附带的默认布局和样式(换句话说,您还没有创建任何自定义样式或布局),那么值得看看它们以更好地了解发生了什么在幕后。您可以在这里找到它们:
布局: /path/to/qtvirtualkeyboard/src/virtualkeyboard/content/layouts
样式: /path/to/qtvirtualkeyboard/src/virtualkeyboard/content/styles
这是一个(有点过于简化的)示例 Qml 文件,它演示了如何定位键盘。在您的情况下,由于您关心键盘占用了多少垂直屏幕空间,因此键盘的 y 属性是您首先要定位的目标。
首先,将 keyboard.y 设置为屏幕的任何高度(例如 parent.height 或您想要获取该信息的任何方式)。将键盘顶部放在屏幕底部可以隐藏它。
然后,当您单击 TextInput 字段时,调用 QtVirtualKeyboard,在状态从默认/初始更改为“可见”期间将 keyboard.y 属性更改为 TextInput 字段的底部。通过状态更改处理此问题的另一个好处是您可以控制键盘动画。
import QtQuick 2.7
import QtQuick.VirtualKeyboard 2.1
Item {
id: appSectionWithTextInput
property int screenHeight: parent.height; // the height of the screen/display
anchors.fill: parent;
TextInput {
id: textInput;
height: 120;
width: parent.width - 2;
color: "#000000"; // black
// http://doc.qt.io/qt-5/qinputmethod.html#properties
focus: Qt.inputMethod.visible;
verticalAlignment: TextInput.AlignVCenter;
}
InputPanel {
id: keyboard;
y: screenHeight; // position the top of the keyboard to the bottom of the screen/display
anchors.left: parent.left;
anchors.right: parent.right;
states: State {
name: "visible";
when: keyboard.active;
PropertyChanges {
target: keyboard;
// position the top of the keyboard to the bottom of the text input field
y: textInput.height;
}
}
transitions: Transition {
from: ""; // default initial state
to: "visible";
reversible: true; // toggle visibility with reversible: true;
ParallelAnimation {
NumberAnimation {
properties: "y";
duration: 250;
easing.type: Easing.InOutQuad;
}
}
}
}
}
如果您想创建自己的自定义布局,最好的办法是将 qtvirtualkeyboard 附带的现有布局之一(例如 en_GB)复制到您选择的目录中。在那里,将其重命名为您喜欢的任何名称并添加以下环境变量:QT_VIRTUALKEYBOARD_LAYOUT_PATH=/path/to/custom/keyboard-layout/mycustomlayout。
Note: The QT_VIRTUALKEYBOARD_LAYOUT_PATH environment variable should be set to the file system directory containing the custom keyboard layouts before running the application.
如果您想创建自己的自定义键盘样式,请参阅 this page对于您应该创建自定义样式目录的特定目录。
在那里,添加以下环境变量:QT_VIRTUALKEYBOARD_STYLE=mycustomstyle。
如果您想直接操纵键盘的大小,您可以访问/更改位于自定义样式目录中的 style.qml 文件中的这些属性。
// Properties
keyboardDesignWidth
keyboardDesignHeight
keyboardRelativetopMargin
keyboardRelativerightMargin
keyboardRelativeBottomMargin
keyboardRelativeLeftMargin
您可以找到这些属性的完整列表 here .
祝你好运!
关于c++ - 根据 QObject 调整 qtvirtualkeyboard 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000729/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!