QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样

这篇具有很好参考价值的文章主要介绍了QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、本自制虚拟键盘特点

1.键盘界面保持在所有界面最上方。

2.点击键盘按钮不会改变底层文本输入框焦点。

3.通过模拟键盘点击事件完成键盘输入文本信息。

4.包含各种键盘自带符号输入。

5.长按按键可以持续重复输入键盘内容。

6.支持win7、win10、Linux等各个系统。

7.界面好看。

总之跟真的虚拟键盘一样,不会有不爽的地方

最新版本看这里:QT自制软键盘 最完美、最简单、支持中文输入(二)

二、windows打开系统自带软键盘

QDesktopServices::openUrl(QUrl("osk.exe", QUrl::TolerantMode));

传统打开系统自带虚拟键盘的方法如上,一行代码即可,但是系统自带的虚拟键盘不一定好用,有的按键太小,有的电脑上可能没有自带的软键盘,干脆直接写一个。

三、让键盘界面保持在最上方、不改变底层界面焦点

很多自制键盘时不知道怎么使键盘保持在最顶层,发现点击键盘界面后系统焦点在键盘界面上了,光标不在底层的行输入框里,就通过输入完成后点击确定的方式将键盘内容传到底层界面,显得不nice,其实这两个问题都很简单能够解决,代码如下

this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus);
Qt::WindowStaysOnTopHint 设置窗口置顶
Qt::WindowDoesNotAcceptFocus 设置无焦点窗口

四、长按按键重复输入键盘内容

特别是我们点击退格删除键时,文本比较多是我们使用真实键盘就会长按退格键把十多个文本挨个删除,而使用虚拟键盘时要按十多次退格键,显得不nice。那么我们使用QPushButton的setAutoRepeat为true,就可以实现按键长按功能了,设置重复操作延时为500ms差不多了,按下的时长超过500ms后马上再次执行按键槽函数。

pbtn->setAutoRepeat(true);    //允许自动重复
pbtn->setAutoRepeatDelay(500);//设置重复操作的时延

五、模拟键盘点击事件完成虚拟键盘输入

一些自制虚拟键盘完成键盘输入的方式是同传递文本到输入框的方式,话不多说,就是不nice。点击虚拟按键直接发送对应的按键点击事件就很nice,这样其实就不会太死,甚至中文输入也可以,我们写的是键盘,不是写中文输入法,那些下载网上含有中文输入法的库的大可不必,输入法你系统用的什么就是什么。如果你想中文输入,系统下载的有搜狗输入法,你的键盘只需按下ctrl+shift切换输入法即可,而不是在键盘里实现中文输入法的功能。那样不nice,模拟发送按键点击事件代码如下。

	QPushButton* pbtn = (QPushButton*)sender();
	if (pbtn->text() >= 'a' && pbtn->text() <= 'z') {
		QKeyEvent keyPress(QEvent::KeyPress, int(pbtn->text().at(0).toLatin1()) - 32, Qt::NoModifier, pbtn->text());
		QKeyEvent keyRelease(QEvent::KeyRelease, int(pbtn->text().at(0).toLatin1()) - 32, Qt::NoModifier, pbtn->text());
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}

通过QApplication::sendEvent发送一个按键按下和按键松开的事件就相当于模拟一个按键按下事件

QKeyEvent说明:

QKeyEvent::QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text = QString(), bool autorep = false, ushort count = 1)

类型参数必须为QEvent::KeyPress、QEvent::KeyRelease或QEvent::ShortcutOverride。 

Int key是事件循环应该监听的Qt:: key的代码。 如果key为0,则事件不是已知键的结果; 例如,它可能是组合序列或键盘宏的结果。 修饰符包含键盘修饰符,给定的文本是键生成的Unicode文本。 如果autorep为真,isAutoRepeat()将为真。 Count是事件中涉及的键的数量。 

QKeyEvent在我们这里用4个参数就行了,第二个参数Qt:: key对应的按键,第四个参数是需要发送的文本,没有这个参数是无法输入任何内容的。

QApplication::sendEvent的第一个参数非常重要,是接收键盘输入的控件,比如是底层界面的lineEdit。

六、键盘符号输入

m_mapSymbolKeys.insert("~", Qt::Key_AsciiTilde);
	m_mapSymbolKeys.insert("`", Qt::Key_nobreakspace); 
	m_mapSymbolKeys.insert("-", Qt::Key_Minus);
	m_mapSymbolKeys.insert("_", Qt::Key_Underscore);
	m_mapSymbolKeys.insert("+", Qt::Key_Plus);
	m_mapSymbolKeys.insert("=", Qt::Key_Equal);
	m_mapSymbolKeys.insert(",", Qt::Key_Comma);
	m_mapSymbolKeys.insert(".", Qt::Key_Period);
	m_mapSymbolKeys.insert("/", Qt::Key_Slash);
	m_mapSymbolKeys.insert("<", Qt::Key_Less);
	m_mapSymbolKeys.insert(">", Qt::Key_Greater);
	m_mapSymbolKeys.insert("?", Qt::Key_Question);
	m_mapSymbolKeys.insert("[", Qt::Key_BracketLeft);
	m_mapSymbolKeys.insert("]", Qt::Key_BracketRight);
	m_mapSymbolKeys.insert("{", Qt::Key_BraceLeft);
	m_mapSymbolKeys.insert("}", Qt::Key_BraceRight); 
	m_mapSymbolKeys.insert("|", Qt::Key_Bar);
	m_mapSymbolKeys.insert("\\", Qt::Key_Backslash);
	m_mapSymbolKeys.insert(":", Qt::Key_Colon);
	m_mapSymbolKeys.insert(";", Qt::Key_Semicolon);
	m_mapSymbolKeys.insert("\"", Qt::Key_QuoteLeft);
	m_mapSymbolKeys.insert("'", Qt::Key_Apostrophe);

    QKeyEvent keyPress(QEvent::KeyPress, m_mapSymbolKeys.value(symbol), Qt::NoModifier, symbol);
	QKeyEvent keyRelease(QEvent::KeyRelease, m_mapSymbolKeys.value(symbol), Qt::NoModifier, symbol);
	QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
	QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);

键盘输入特定的符号重要是找到QKeyEvent第二个参数对应的按键值即可。按键中的值被都在qnamespace.h的头文件中的enum Key枚举类型内。

七、界面

QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样

八、头文件代码

#pragma once
#pragma execution_character_set("utf-8")
#include <QDialog>
#include "ui_frmKeyBoard.h"
#include "moveWidget.h"
#include <QPushButton>
#include <QKeyEvent>
#include <QDebug>
#include <QStyle>

class frmKeyBoard : public QDialog
{
	Q_OBJECT

public:
	frmKeyBoard(QWidget *parent = nullptr);
	~frmKeyBoard();

	void initFocusWidget(QWidget*);

private slots:
	void slotKeyButtonClicked();
	void slotKeyLetterButtonClicked();
	void slotKeyNumberButtonClicked();

private:
	Ui::frmKeyBoardClass ui;
	void initFrm();
	void initStyleSheet();

	QWidget* m_focusWidget;	//键盘输入主窗口

	QVector<QPushButton*> m_letterKeys;
	QVector<QPushButton*> m_NumberKeys;

	QMap<QString, Qt::Key> m_mapSymbolKeys;

};

九、源文件代码

#include "frmKeyBoard.h"

frmKeyBoard::frmKeyBoard(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);

	this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
	this->setWindowTitle("屏幕键盘");
	this->setWindowModality(Qt::WindowModal); 
	this->setAttribute(Qt::WA_DeleteOnClose);

	MoveWidget* moveWidget = new MoveWidget();
	moveWidget->setWidget(this);

	this->initFrm();
	this->initStyleSheet();
}

frmKeyBoard::~frmKeyBoard()
{
}

void frmKeyBoard::initFocusWidget(QWidget* widget)
{
	m_focusWidget = widget;
}

void frmKeyBoard::initFrm()
{
    ui.pushButton_closeKeyboard->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
	m_letterKeys.clear();
	m_NumberKeys.clear();
	QList<QPushButton*> pbtns = this->findChildren<QPushButton*>();
	foreach(QPushButton * pbtn, pbtns) {
		pbtn->setAutoRepeat(true);    //允许自动重复
		pbtn->setAutoRepeatDelay(500);//设置重复操作的时延

		if (pbtn->text() >= 'a' && pbtn->text() <= 'z') {
			connect(pbtn, &QPushButton::clicked, this, &frmKeyBoard::slotKeyLetterButtonClicked);
			m_letterKeys.push_back(pbtn);
		}
		else if (pbtn->text().toInt() > 0 && pbtn->text().toInt() <= 9 || pbtn->text() == "0") {
			connect(pbtn, &QPushButton::clicked, this, &frmKeyBoard::slotKeyNumberButtonClicked);
			m_NumberKeys.push_back(pbtn);
		}
		else{
			connect(pbtn, &QPushButton::clicked, this, &frmKeyBoard::slotKeyButtonClicked);
		}
	}

	m_mapSymbolKeys.insert("~", Qt::Key_AsciiTilde);
	m_mapSymbolKeys.insert("`", Qt::Key_nobreakspace); 
	m_mapSymbolKeys.insert("-", Qt::Key_Minus);
	m_mapSymbolKeys.insert("_", Qt::Key_Underscore);
	m_mapSymbolKeys.insert("+", Qt::Key_Plus);
	m_mapSymbolKeys.insert("=", Qt::Key_Equal);
	m_mapSymbolKeys.insert(",", Qt::Key_Comma);
	m_mapSymbolKeys.insert(".", Qt::Key_Period);
	m_mapSymbolKeys.insert("/", Qt::Key_Slash);
	m_mapSymbolKeys.insert("<", Qt::Key_Less);
	m_mapSymbolKeys.insert(">", Qt::Key_Greater);
	m_mapSymbolKeys.insert("?", Qt::Key_Question);
	m_mapSymbolKeys.insert("[", Qt::Key_BracketLeft);
	m_mapSymbolKeys.insert("]", Qt::Key_BracketRight);
	m_mapSymbolKeys.insert("{", Qt::Key_BraceLeft);
	m_mapSymbolKeys.insert("}", Qt::Key_BraceRight); 
	m_mapSymbolKeys.insert("|", Qt::Key_Bar);
	m_mapSymbolKeys.insert("\\", Qt::Key_Backslash);
	m_mapSymbolKeys.insert(":", Qt::Key_Colon);
	m_mapSymbolKeys.insert(";", Qt::Key_Semicolon);
	m_mapSymbolKeys.insert("\"", Qt::Key_QuoteLeft);
	m_mapSymbolKeys.insert("'", Qt::Key_Apostrophe);
}

void frmKeyBoard::initStyleSheet()
{
	QString qss;
	qss += "QWidget{ background-color:rgb(26,26,26)}";
    qss += "QPushButton{ color:white; background-color:rgb(51,51,51); height:60px; font-size:bold 15pt; border:1px solid rgb(26,26,26); border-radius: 0px; min-width:50px;}";
	qss += "QPushButton:hover{background-color:rgb(229,229,229); color:black;}";
	qss += "QPushButton:pressed,QPushButton:checked{background-color:rgb(0,118,215);}";
	qss += "#pushButton_closeKeyboard{background-color:rgba(0,0,0,0); border:0px}";
	qss += "#pushButton_closeKeyboard:hover{background-color:#b30220;}";
	qss += "#pushButton_space{min-width:500px;}";
	qss += "#pushButton_backspace,#pushButton_shift{min-width:100px;}";
	qss += "#pushButton_enter{min-width:120px;}";
	qss += "#pushButton_tab,#pushButton_ctrl{min-width:70px;}";
	qss += "#pushButton_capsLock{min-width:80px;}";
	qss += "#pushButton_up{min-width:150px;}";
	this->setStyleSheet(qss);
}

void frmKeyBoard::slotKeyButtonClicked()
{
	QPushButton* pbtn = (QPushButton*)sender();
	QString objectName = pbtn->objectName();
	if (objectName == "pushButton_closeKeyboard") {
		this->close();
		return;
	}
	if (pbtn->text().contains("Backspace")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Backspace, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Caps")) {	
		if (pbtn->isChecked()) {
			for (auto pbtnKey : m_letterKeys) {
				pbtnKey->setText(pbtnKey->text().toUpper());
			}
		}
		else {
			for (auto pbtnKey : m_letterKeys) {
				pbtnKey->setText(pbtnKey->text().toLower());
			}
		}
	}
	else if(pbtn->text() == "Space") {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " ");
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Space, Qt::NoModifier, " ");
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Tab")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Tab, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Enter")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Shift")) {
		if (pbtn->isChecked()) {
			for (auto pbtnKey : m_letterKeys) {
				pbtnKey->setText(pbtnKey->text().toUpper());
			}
		}
		else {
			for (auto pbtnKey : m_letterKeys) {
				pbtnKey->setText(pbtnKey->text().toLower());
			}
		}
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Shift, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Shift, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Ctrl")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Control, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Control, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Win")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Menu, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("Alt")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Alt, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Alt, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("↑")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Up, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("↓")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Down, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("←")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Left, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text().contains("→")) {
		QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier);
		QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_Right, Qt::NoModifier);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else {
		QString symbol;
		if (ui.pushButton_shift->isChecked())
			symbol = pbtn->text().split("\n").at(0);
		else
			symbol = pbtn->text().split("\n").at(1);

		QKeyEvent keyPress(QEvent::KeyPress, m_mapSymbolKeys.value(symbol), Qt::NoModifier, symbol);
		QKeyEvent keyRelease(QEvent::KeyRelease, m_mapSymbolKeys.value(symbol), Qt::NoModifier, symbol);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	//取消组合键按下
	if (!pbtn->text().contains("Shift") && !pbtn->text().contains("Ctrl") && !pbtn->text().contains("Win") && !pbtn->text().contains("Alt")) {
		if (ui.pushButton_shift->isChecked()) {
			ui.pushButton_shift->setChecked(false);
			for (auto pbtnKey : m_letterKeys) {
				pbtnKey->setText(pbtnKey->text().toLower());
			}
		}
		if (ui.pushButton_ctrl->isChecked())
			ui.pushButton_ctrl->setChecked(false);
		if (ui.pushButton_win->isChecked())
			ui.pushButton_win->setChecked(false);
		if (ui.pushButton_alt->isChecked())
			ui.pushButton_alt->setChecked(false);
	}
}


void frmKeyBoard::slotKeyLetterButtonClicked()
{
	QPushButton* pbtn = (QPushButton*)sender();
	if (pbtn->text() >= 'a' && pbtn->text() <= 'z') {
		QKeyEvent keyPress(QEvent::KeyPress, int(pbtn->text().at(0).toLatin1()) - 32, Qt::NoModifier, pbtn->text());
		QKeyEvent keyRelease(QEvent::KeyRelease, int(pbtn->text().at(0).toLatin1()) - 32, Qt::NoModifier, pbtn->text());
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	else if (pbtn->text() >= 'A' && pbtn->text() <= 'Z') {
		QKeyEvent keyPress(QEvent::KeyPress, int(pbtn->text().at(0).toLatin1()), Qt::NoModifier, pbtn->text());
		QKeyEvent keyRelease(QEvent::KeyRelease, int(pbtn->text().at(0).toLatin1()), Qt::NoModifier, pbtn->text());
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
		QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	}
	//取消组合键按下
	if (ui.pushButton_shift->isChecked()) {
		ui.pushButton_shift->setChecked(false);
		for (auto pbtnKey : m_letterKeys) {
			pbtnKey->setText(pbtnKey->text().toLower());
		}
	}
	if (ui.pushButton_ctrl->isChecked())
		ui.pushButton_ctrl->setChecked(false);
	if (ui.pushButton_win->isChecked())
		ui.pushButton_win->setChecked(false);
	if (ui.pushButton_alt->isChecked())
		ui.pushButton_alt->setChecked(false);
}

void frmKeyBoard::slotKeyNumberButtonClicked()
{
	QPushButton* pbtn = (QPushButton*)sender();
	QKeyEvent keyPress(QEvent::KeyPress, pbtn->text().toInt() + 48, Qt::NoModifier, pbtn->text());
	QKeyEvent keyRelease(QEvent::KeyRelease, pbtn->text().toInt() + 48, Qt::NoModifier, pbtn->text());
	QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
	QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
	//取消组合键按下
	if (ui.pushButton_shift->isChecked()) {
		ui.pushButton_shift->setChecked(false);
		for (auto pbtnKey : m_letterKeys) {
			pbtnKey->setText(pbtnKey->text().toLower());
		}
	}
	if (ui.pushButton_ctrl->isChecked())
		ui.pushButton_ctrl->setChecked(false);
	if (ui.pushButton_win->isChecked())
		ui.pushButton_win->setChecked(false);
	if (ui.pushButton_alt->isChecked())
		ui.pushButton_alt->setChecked(false);
}

十一、使用示例

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QHBoxLayout* layout = new QHBoxLayout();
    layout->setContentsMargins(0, 0, 0, 0);
    layout->addWidget(ui->pushButton, 0, Qt::AlignRight);
    ui->lineEdit->setLayout(layout);

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    frmKeyBoard* keyBoard = new frmKeyBoard();
    keyBoard->initFocusWidget(this);
    keyBoard->show();
}

十二、效果

QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样

Qt自制虚拟键盘

 十三、资源下载

QT自制虚拟键盘,数字、字母大小写、符号等输入均包含,代码非常简单易懂

后续文章:QT自制软键盘 最完美、最简单、支持中文输入(二) 文章来源地址https://www.toymoban.com/news/detail-487562.html

到了这里,关于QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT 虚拟键盘问题解决,dialog,模态窗口,无感知

    目前各个帖子都没有完美解决QT下模态窗口的键盘无响应问题,此帖已解决此问题。 问题原因:原因主要是模态窗口卡住了虚拟键盘的事件响应,导致两者冲突,出现界面假死现象 目前主要解决方案是设置Dialog为非模态窗口,此法属于绕过虚拟键盘问题,模态窗口的作用就没

    2024年02月09日
    浏览(69)
  • 【自制键盘01】CH9329代码两则,让任何单片机都能做键盘

    CH9329是一款由WCH(Nanjing QinHeng Electronics Co. Ltd.)生产的USB转串口芯片,可以方便地将USB接口转换为串口接口,它在键盘设计这块可以实现作为MCU和电脑设备的“中间人”,把串口信号转换为按键。 来自官网页面: 串口转HID键盘鼠标芯片 CH9329 - 南京沁恒微电子股份有限公司

    2024年02月09日
    浏览(38)
  • (问题解决)(自制脚本)Ubuntu20.04 键盘会突然失灵、键盘延迟突然很大怎么办

    最近在写毕业论文,代码在ubuntu上跑的,得一边跑代码,一边写论文。但用一段时间,或者电脑静置一段时间后,键盘输入延迟突然变得很大,这期间鼠标是正常的,只是输不了字,得等几分钟才能恢复正常,非常耽误时间。 后来参考下面这篇博客,说是ibus拼音输入法的问

    2024年02月10日
    浏览(70)
  • 微信小程序自定义顶部导航栏的胶囊和微信自带的胶囊一样的透明背景色

    想要实现微信自带的右上角胶囊背景透明很简单,只需要在pages.js里面设置下面配置就可以了: 但是设置完这个后,胶囊的背景色是那种黑色半透明的效果:(微信开发者工具和真机上显示的效果不一致,要以真机为准) 手机端的效果:所以还是要以手机端为准   左侧的返

    2024年02月01日
    浏览(41)
  • 用Qt自制一个小闹钟

    当按下启动按钮时,停止按钮可用,启动按钮不可用,闹钟无法设置,无法输入自定义内容 当按下停止按钮时,暂停播报,启动按钮可用,闹钟可以设置,可以输入自定义内容  

    2024年02月09日
    浏览(34)
  • 禁用笔记本自带的键盘

    背景: 办公桌太小啦,显示器加笔记本很占位置,导致外接键盘没有位置放,欲将外接键盘放置于笔记本键盘上,于是寻得此法 禁用笔记本自带的键盘具体解决: 以管理员身份打开 命令行提示符cmd 输入 sc config i8042prt start= disabled 重启电脑 问题解决 恢复: 以管理员身份打

    2024年02月15日
    浏览(65)
  • win10语言切换调整为像win7一样,设置纯英文键盘切换,使用ctrol+shift切换键盘

    我们在玩游戏或者写代码的时候,常常需要使用shift键,而输入法的shift键常常是中英切换按键,这就让人非常不爽了,这里仿照在win7中的输入法设置,我们使用一个纯英文的美式键盘和一个默认中文的搜狗键盘,并使用ctrol+shift实现键盘切换,这样在纯英文键盘的时候就不用

    2024年02月03日
    浏览(59)
  • win键失效(笔记本自带键盘和外接键盘)

    环境: Win10系统 设备: 华为笔记本电脑MateBook D 问题: 笔记本自带键盘以及外接键盘的其他按键都确认没有其他的问题,只是Win键失效了 解决步骤: (1)笔记本自带键盘 先确认下是不是键盘出现了物理错误,比如零件等其他的问题 确认其他问题,按【crtl+esc】能否打开”

    2024年02月11日
    浏览(93)
  • 笔记本禁用自带键盘(windows系统)

    使用 win系统笔记本 的小伙伴接入了键盘外设,同时又想要禁用笔记本自带的键盘,无论是出于对笔记本键盘的嫌弃,还是为了防止误触等等,那么希望本篇文章能够帮助到你 确保笔记本外设键盘连接好 找到设备管理器(win10 / win11,直接win+x搜索 设备管理器 进入即可) 找到

    2024年02月08日
    浏览(75)
  • Mac 一键禁用自带键盘 使用外接键盘(2022.11.3 测试有效)

    第一步:进入上方链接进入官网,点击Download 下载。 如官网维护则可以访问此链接: https://pan.baidu.com/s/1Qe7b7OVakR-Oi42WiWRxQQ 提取码: mqct 下载完如图 第二步:安装 第三步:开启键盘输入监听权限 打开软件会有提示——点击打开系统偏好设置 若应用图标带锁或屏蔽失败,则进行

    2023年04月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包