QT5:调用qt键盘组件实现文本框输入

目录

一、环境与目标

二、Qt VirtualKeyboard

1.勾选Qt VirtualKeyboard

2.ui设计流程

3.注意事项及问题点

三、参考代码

参考博客


一、环境与目标

qt版本:5.12.7

windows 11 下的 Qt Designer (已搭建)

目标:创建一个窗口,在窗口创建按钮,点击按钮弹出弹窗,弹窗有文本输入框,点击文本输入框弹出qt 自带的官方键盘,通过键盘输入文本至输入框。


二、Qt VirtualKeyboard

Qt VirtualKeyboard 是一个基于 Qt 的虚拟键盘库,它允许开发者在没有物理键盘的设备上通过触摸屏或其他输入设备实现键盘输入,想要使用这个库则需要在安装中包含这个库。

1.勾选Qt VirtualKeyboard

如果安装时没有安装此库建议直接卸载重装可能会快一点。


2.ui设计流程

1)创建主窗口和按钮:
创建一个新工程,在主窗口中放置一个按钮,并为其设置点击事件槽。

2)创建弹窗和文本输入框:
创建一个新的弹窗ui,在其中创建文本输入框(例如QLineEdit),或通过代码实现。

 

3)实现弹窗的显示逻辑:
在按钮的点击事件槽中,实例化并显示弹窗。

4)集成Qt VirtualKeyboard:
在弹窗的文本输入框上设置焦点,并在需要时显示Qt VirtualKeyboard。


3.注意事项及问题点

1)在 widget 引用Qt VirtualKeyboard 需要在main函数加上这句(QApplication a(argc, argv)之前)。

qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

2)在弹窗中使用键盘时弹窗需要设置为非阻塞模式(myDialog->show),否则键盘将不起作用。(也可以参考其它解决方式)。

//    MyDialog myDialog;
    //    myDialog.exec(); 阻塞
         myDialog->show();非阻塞

 3)非阻塞模式下myDialog 变量如果为局部变量,那么弹窗运行时会直接一闪而过,因此不能用局部变量。


三、参考代码

以下代码参考自文心一言示例改装

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include "mydialog.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;MyDialog *myDialog;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow),myDialog(new MyDialog(this))
{ui->setupUi(this);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{//    MyDialog myDialog;//    myDialog.exec();myDialog->show();
}

mydialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H#include <QDialog>#include <QLineEdit>
#include <QVBoxLayout>
#include <QSlider>namespace Ui {
class MyDialog;
}class MyDialog : public QDialog
{Q_OBJECTpublic:explicit MyDialog(QWidget *parent = nullptr);~MyDialog();private:Ui::MyDialog *ui;QLineEdit *lineEdit;QVBoxLayout *layout;};#endif // MYDIALOG_H

mydialog.cpp

#include "mydialog.h"
#include "ui_mydialog.h"MyDialog::MyDialog(QWidget *parent) :QDialog(parent),ui(new Ui::MyDialog)
{ui->setupUi(this);// 创建输入框lineEdit = new QLineEdit(this);lineEdit->setFocusPolicy(Qt::StrongFocus); // 确保可以接收焦点QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(lineEdit);  // 1 表示密码输入框可以扩展以填充可用空间// 设置对话框的布局setLayout(layout);
}MyDialog::~MyDialog()
{delete ui;
}

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

四、总结

本文主要记录qt学习与使用过程中对键盘的使用,不得不说的是随着ai技术的发展,对新人学习相关的知识确实起到了不错的帮助,虽然只能提供简单的示例,但至少可以帮忙找到一个确切的方向。


参考博客

Qt对话框Dialog无法使用软键盘输入、Widget子窗口背景异常问题_qt无法对子窗口输入-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/19891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPI协议——Flash的基本认识

1. 机械硬盘&#xff08;HDD&#xff09;和固态硬盘&#xff08;SSD&#xff09; 1.1 机械硬盘&#xff08;HDD&#xff09; 构造&#xff1a;机械硬盘由一个或多个磁盘片组成&#xff0c;这些磁盘片在一个密封的外壳内高速旋转。读写磁头悬停在磁盘片表面&#xff0c;通过电磁…

二叉树的顺序实现-堆

一、什么是堆 在数据结构中&#xff0c;堆&#xff08;Heap&#xff09;是一种特殊的树形数据结构&#xff0c;用数组存储&#xff0c;通常被用来实现优先队列。 堆具有以下特点&#xff1a; 堆是一棵完全二叉树&#xff08;Complete Binary Tree&#xff09;&#xff0c;即…

Unity各类资源链接汇总集合

不定时更新最新的资源都会放在前面 Unity AR VR Mixed Reality 4.0 虚拟现实虚拟加强插件 链接: https://pan.baidu.com/s/1fETUcJfnOlqQR1_rYL4jHQ?pwd=qvcx Unity Inventory Plus Customizable System 2.0.0 背包库存工具 链接:https://pan.baidu.com/s/1yEsmDvIkyY40E6…

下载安装nvm,使用nvm管理node.js版本

目录 一、下载安装nvm&#xff08;windows&#xff09; 二、使用nvm管理node.js版本 &#xff08;1&#xff09;nvm命令行 &#xff08;2&#xff09; 使用nvm管理node.js版本 ①查看nvm版本 ②显示活动的node.js版本 ③列出可供下载的node.js版本 ④安装node.js指定版本 ⑤列出…

HTML+CSS 响应式侧边栏菜单

效果演示 实现了一个响应式的侧边栏菜单,当用户点击菜单按钮时,菜单会从左侧滑出,同时页面内容会向右移动,展示菜单选项。菜单选项包括一个头像和用户名,以及其他的菜单项,当用户将鼠标悬停在菜单项上时,菜单项会高亮显示。这段代码使用了CSS的flex布局和过渡效果,以及…

Oracle登录时出现ERROR: ORA-01031 insufficient privileges

情况&#xff1a; 1.环境&#xff1a; - 操作系统版本&#xff1a;64位win10- Oracle版本&#xff1a;64位 oracle 11g解决方法&#xff1a; 利用DOS命令添加系统用户到ora_dba用户组 2.查看用户组 net localgroup–查看用户组&#xff1b; 3.查看ora_dba用户组下的具体用户&…

input输入框的一些复习

<template><div><div style"text-align: center;margin: 10px 0;"><span style"font-size: 15px;font-weight: bold;">input输入框的基本应用</span></div><el-descriptions :column"3" size"defau…

tinycudann安装

在安装完torch等 直接运行下面的指令会出现错误 pip install githttps://github.com/NVlabs/tiny-cuda-nn/#subdirectorybindings/torch大部分错误是下面的 大概看了一下都是因为虚拟环境里面的include文件下缺少文件&#xff0c;将之前的一些.h文件全部复制过来在执行上面的…

【vue3|第5期】Vue3响应式数据:ref 与 reactive 的深入解析

日期&#xff1a;2024年5月31日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

vue3 前端实现导出下载pdf文件

这样的数据实现导出 yourArrayBufferOrByteArray 就是后端返回数据 // 创建Blob对象const blob new Blob([yourArrayBufferOrByteArray], { type: application/pdf });// 创建一个表示该Blob的URLconst url URL.createObjectURL(blob);// 创建一个a标签用于下载const a doc…

前端 JS 经典:闭包与内存泄漏、垃圾回收

1. 闭包 函数嵌套函数&#xff0c;内部函数可以引用外部函数的参数和变量。参数和变量不会被垃圾回收机制收回。 2. 垃圾回收机制 什么是垃圾&#xff1f;就是不再需要的内存。什么是垃圾回收机制&#xff1f;就是浏览器会自动回收掉我们不要的数据。那浏览器怎么判断什么是…

Redis常用命令大全

目录 1、五大数据类型的基本命令 1.1 字符串 1.2 列表 1.3 哈希 1.4 集合 1.5 有序集合 2、与key相关 2.1 查看redis数据的类型 2.2 查看当前redis库中的所有key命令 3、除了五大数据类型外常见命令 3.1 键操作 3.2 服务器操作 3.3 连接操作 3.4 发布/订阅 3.5 事…

大模型时代的具身智能系列专题(六)

UCSD 王小龙组 王小龙是UCSD电子与计算机工程系的助理教授。他曾在加州大学伯克利分校与Alexei Efros和Trevor Darrell一起担任博士后研究员&#xff0c;在CMU RI获得了机器人学博士学位&#xff0c;师从Abhinav Gupta。他的研究重点是通过视频和物理机器人交互数据来学习3D和…

Vue 2.0使用Vue-count-to给数字添加增长动画

在开发后台管理系统时&#xff0c;时常会遇到数据汇总&#xff0c;为了页面展示更生动&#xff0c;用户体验更好&#xff0c;通常会对汇总的数字加一个逐步递增动画。 实现这个效果一般是用的 Vue-count-to这个插件&#xff0c;这是一款简单好用的一个数字滚动插件&#xff0c;…

HTML5 视频 Vedio 标签详解

HTML5 引入了 <video> 标签&#xff0c;允许开发者在网页中直接嵌入视频文件&#xff0c;而不需要依赖第三方插件。本文将全面介绍 <video> 标签的各种属性&#xff0c;并通过实例代码详细说明其用法。 一、基础用法 1. 基本结构 HTML5 中使用 <video> 标…

达梦数据库修改兼容模式设置

达梦数据库兼容模式设置及服务管理操作手册 1. 查询兼容模式 在达梦数据库中&#xff0c;可以通过以下 SQL 查询当前兼容模式&#xff1a; SELECT para_name, para_value FROM v$dm_ini WHERE para_name COMPATIBLE_MODE;2. 设置兼容模式 使用 sp_set_para_value 函数设置…

如何申请微信支付0.2%-0.3%的手续费优惠? 详细步骤

随着微信支付在日常交易中的普及&#xff0c;许多商家开始关注如何降低支付手续费的问题。近期&#xff0c;微信支付推出了一项新的费率优惠政策&#xff0c;允许商家享受0.2%-0.3%的费率优惠。这一政策无疑为商家带来了实质性的成本节约。那么&#xff0c;商家如何申请这一费率…

Oracle RAC 集群配置共享目录ACFS

Oracle RAC 集群配置共享目录ACFS 应用场景&#xff1a;创建的ACFS文件系统用于部署OGG做数据同步使用。 1、创建共享磁盘组 create diskgroup OGG external redundancy disk /dev/mapper/ASM08, /dev/mapper/ASM09; 2、创建 acfs 文件系统 ACFS文件系统 在ASM磁盘组中通过A…

开源还是闭源这是一个问题

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

线性数据结构-数组

数组&#xff1a;线性数据结构&#xff08;一维数组结构&#xff09; 线性的数据结构强调存储和顺序 数组在内存存储空间上是连续的&#xff0c;并且长度固定不可变更 数组扩容 因为数组定长&#xff0c;当想往长度为8的数组中添加第九个元素时&#xff0c;操作系统会开辟一段…