1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Qt调用系统软键盘

Qt调用系统软键盘

时间:2018-10-03 18:07:33

相关推荐

Qt调用系统软键盘

Qt调用系统软键盘

在一些环境下,运行的环境下没有外界键盘,这样必须要使用虚拟键盘。

方法有两种:

1.调用电脑本身自带的软键盘。方便。

2.自己造车,自己写一个。

本文。只是这针对第一个,调用系统自带的软键盘。第二种可以自己尝试。

本文重点是在开启键盘方法

源代码如下

.ui文件

.h文件

#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();protected:bool eventFilter(QObject *watched, QEvent *event);private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::MainWindow *ui;};

.cpp 文件

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>#include <QProcess>#include <QDebug>#include <QDesktopServices>#include <QUrl>#include <Windows.h>#pragma comment(lib, "user32.lib")MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);ui->lineEdit_name->clear(); //清除显示ui->lineEdit_class->clear();//事件绑定ui->lineEdit_name->installEventFilter(this);ui->lineEdit_class->installEventFilter(this);}MainWindow::~MainWindow(){delete ui;}//开启系统软键盘void MainWindow::on_pushButton_clicked(){//只能在win7下使用//QDesktopServices::openUrl(QUrl("osk.exe", QUrl::TolerantMode));//win8.1 win10 下使用PVOID OldValue = nullptr;BOOL bRet = Wow64DisableWow64FsRedirection(&OldValue);QString csProcess = "C:\\Windows\\System32\\osk.exe";QString params="";ShellExecute(nullptr, L"open", (LPCWSTR)csProcess.utf16(), (LPCWSTR)params.utf16(), nullptr, SW_SHOWNORMAL);if (bRet){Wow64RevertWow64FsRedirection(OldValue);}}//事件过滤器bool MainWindow::eventFilter(QObject *watched, QEvent *event){if(watched==ui->lineEdit_name && event->type()==QEvent::MouseButtonPress){ui->lineEdit_name->setFocus();}else if(watched==ui->lineEdit_class && event->type()==QEvent::MouseButtonPress){ui->lineEdit_class->setFocus();}return QWidget::eventFilter(watched,event);}//提交用户信息void MainWindow::on_pushButton_2_clicked(){QString name,banji,gender,str;name=ui->lineEdit_name->text().trimmed();banji=ui->lineEdit_class->text().trimmed();gender=ui->comboBox_gender->currentText();if(name=="" && banji==""){QMessageBox::information(this,"提示","学信信息不能为空!",QMessageBox::Ok);}else{str=name+","+banji+","+gender;ui->label_studentInfo->setText(str);}}

运行结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。