shortcutedit.cpp

来自「Qt开发的GRE背单词软件」· C++ 代码 · 共 50 行

CPP
50
字号
#include "ShortcutEdit.h"
#include <QKeyEvent>
#include <QKeySequence>

ShortcutEdit::ShortcutEdit(QWidget *parent)	: QLineEdit(parent) {}

QString ShortcutEdit::getModifierString(QKeyEvent* event) const
{
	Qt::KeyboardModifiers modifiers = event->modifiers();
	QString result;
	if(modifiers.testFlag(Qt::ControlModifier))
		result += "Ctrl+";
	if(modifiers.testFlag(Qt::ShiftModifier))
		result += "Shift+";
	if(modifiers.testFlag(Qt::AltModifier))
		result += "Alt+";
	return result;
}

bool ShortcutEdit::isModifier(int key) const
{
	return key == Qt::Key_Control || 
		   key == Qt::Key_Shift   || 
		   key == Qt::Key_Alt;
}

QString ShortcutEdit::getKeyString(QKeyEvent* event) const {
	return isModifier(event->key()) ? QString() 
									: QKeySequence(event->key()).toString();
}

void ShortcutEdit::keyPressEvent(QKeyEvent* event) {
	update(event);
}

void ShortcutEdit::keyReleaseEvent(QKeyEvent* event) {
	if(!acceptable())
		update(event);
}

void ShortcutEdit::update(QKeyEvent* event) {
	setText(getModifierString(event) + getKeyString(event));
}

// if ends with letter or number
bool ShortcutEdit::acceptable() const
{
	const QChar key = text().at(text().length() - 1);
	return key.isLetterOrNumber();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?