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_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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_OBJECT

public:
    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博客

  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt中,可以通过设置QLineEdit的inputMethodHints属性来调用数字键盘。首先,打开Qt Designer,选择LineEdit控件,然后在属性编辑器中找到inputMethodHints属性,将其设置为Qt::ImhDigitsOnly。这将告诉Qt,该LineEdit只需要输入数字。当用户在此LineEdit上单击时,数字键盘将自动打开并可以进行输入。如果您希望LineEdit具有更多的限制,如只允许输入特定的数字范围或特定的格式,您可以在LineEdit的textChanged()信号中添加一些自定义的验证代码。例如,您可以检查用户输入的字符是否为数字,或者您可以强制初始数字为特定值。通过这种方式,您可以在Qt中轻松设置一个只允许数字输入的LineEdit,并为用户提供一个方便的数字键盘。 ### 回答2: 在Qt中,可以使用QLineEdit类来创建文本框,并使用Qt Virtual Keyboard调用数字键盘。 为了使用Qt Virtual Keyboard,需要在.pro文件中添加虚拟键盘插件: ``` QT_CONFIG -= no-pkg-config CONFIG += link_pkgconfig PKGCONFIG += virtualkeyboard ``` 在创建QLineEdit时,可以为其设置QInputMethod属性,以指示需要使用虚拟键盘。在输入焦点进入文本框时,将自动弹出虚拟键盘。 示例代码如下: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLineEdit lineEdit; lineEdit.setInputMethodHints(Qt::ImhDigitsOnly); lineEdit.show(); return app.exec(); } ``` 在上述代码中,我们使用setInputMethodHints()方法指示文本框只能输入数字。这样,在弹出虚拟键盘时,只会显示数字键盘。 需要注意的是,Qt Virtual Keyboard是一个插件,需要单独安装。在使用前,需要确保已经安装了此插件。 ### 回答3: 在Qt中,如果需要将文本框调用数字键盘,需要使用QLineEdit和QInputDialog类。首先,我们需要使用QLineEdit创建一个文本框,并将其设置为只读模式,因为我们只需要该文本框用于显示数字。接下来,我们需要在代码中编写一些操作,以便当用户单击该文本框时,会出现数字键盘。 在QLineEdit的clicked()信号中,我们可以使用QInputDialog::getInt()方法来显示一个数字键盘对话框。该方法需要三个参数:窗口标题、提示文本和默认值。在我们的例子中,窗口标题可以是“输入数字”,提示文本可以是“请输入一个数字”或者任何你想要显示的文本。默认值可以是0或1,或者没有默认值。 接下来,当用户单击文本框时,会弹出数字键盘对话框。用户可以在该对话框中输入数字,并单击“OK”按钮。如果用户单击“OK”按钮,则我们通过QInputDialog::getInt()方法获取用户输入的值,并在文本框中显示该值。 下面是一个简单的Qt程序,实现文本框调用数字键盘的功能: #include <QApplication> #include <QHBoxLayout> #include <QLineEdit> #include <QInputDialog> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget *widget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(widget); QLineEdit *lineEdit = new QLineEdit(widget); lineEdit->setReadOnly(true); layout->addWidget(lineEdit); widget->show(); QObject::connect(lineEdit, &QLineEdit::clicked, [&]() { int value = QInputDialog::getInt(widget, "输入数字", "请输入一个数字", 0); lineEdit->setText(QString::number(value)); }); return app.exec(); } 需要注意的是,如果你的程序需要支持移动设备(如iOS或Android),那么你可能需要使用Qt的虚拟键盘库QVirtualKeyboard。该库提供了一个完整的虚拟键盘界面,可以满足更高级的要求。但对于大部分情况下,上述方法已足以满足需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值