QShortcut
简介 QShortcut
类允许你为你的应用程序定义快捷键。当快捷键被按下时,QShortcut
可以触发一个槽函数,或者它可以直接激活一个QWidget
。
QShortcut
对象 QShortcut
可以通过多种构造函数创建,其中最常见的形式是:
QShortcut(QKeySequence key, QWidget *parent, const char *member = 0, QObject *receiver = 0, Qt::ShortcutContext context = Qt::WindowShortcut);
key
:QKeySequence
类型,表示快捷键的键序。你可以直接使用QKeySequence::StandardKey
枚举值,或者构建一个自定义的QKeySequence
。
parent
:QWidget
的指针,表示QShortcut
将依附的父窗口。通常是你想要响应快捷键的窗口。
member
:可选参数,指向成员函数(槽)的名字,该函数将在快捷键被激活时被调用。如果省略或设为0
,则不会自动连接任何槽。
receiver
:可选参数,QObject
的指针,表示将接收activated
信号的对象。如果省略或设为0
,则parent
将作为接收者。
context
:可选参数,Qt::ShortcutContext
枚举值,表示快捷键的上下文。常见的值有Qt::WindowShortcut
(默认值,仅在当前窗口激活时生效)、Qt::WidgetShortcut
(仅在特定的QWidget
有焦点时生效)等。
创建一个QShortcut
对象,使其在按下Ctrl+C
时调用copy
槽函数:
QShortcut *copyShortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_C), this);
connect(copyShortcut, &QShortcut::activated, this, &MainWindow::copy);
在这个例子中,QKeySequence(Qt::CTRL + Qt::Key_C)
创建了一个表示Ctrl+C
的QKeySequence
对象。this
作为parent
参数,意味着快捷键只在MainWindow
窗口激活时生效。activated
信号被连接到MainWindow
的copy
槽函数,当快捷键被按下时,copy
函数将被调用。
QShortcut
是Qt中用于处理快捷键的重要类。通过使用QShortcut
,你可以轻松地为应用程序添加键盘快捷方式,增强用户体验和应用程序的可访问性。
connect(shortcutZoomIn, &QShortcut::activated, [=](){ zoomIn(); });
connect
函数: connect
是Qt中的一个函数,用于将一个对象的信号(signal)连接到另一个对象的槽(slot)。当信号被发射时,相应的槽会被调用。
shortcutZoomIn
: 这是一个QShortcut
对象,它代表了一个快捷键。当这个快捷键被按下时,QShortcut
对象的activated
信号将被触发。
&QShortcut::activated
: 这是QShortcut
类的activated
信号的指针。activated
信号在快捷键被按下时发射。
[=](){ zoomIn(); }
: 这是一个lambda表达式,它捕获当前作用域内的所有变量(通过值捕获,即[=]
)。当lambda表达式被调用时,它会执行zoomIn
函数。lambda表达式在现代C++中提供了一种简洁的方法来定义匿名函数。
zoomIn
函数: 这个函数是lambda表达式内部调用的目标,它通常定义在类中,用于实现缩放功能,例如增大字体大小或增加图像的缩放级别。
整个语句的作用是:当shortcutZoomIn
对象检测到其关联的快捷键被按下时,activated
信号将被发射,这将触发connect
函数中定义的lambda表达式,进而调用zoomIn
函数。因此,每次按下shortcutZoomIn
的快捷键时,zoomIn
函数都会被执行,实现相应的缩放行为。
Lambda函数的介绍https://mp.csdn.net/mp_blog/creation/editor/140818257
Widget::Widget(QWidget *parent)
: QWidget(parent), // 基类构造器初始化
ui(new Ui::Widget) // UI类的指针分配与初始化
{
ui->setupUi(this); // 设置UI
// 创建快捷键
QShortcut *shortcutZoomIn = new QShortcut(QKeySequence(tr("Ctrl++", "File|Zoom In")), this); // 设置放大为Ctrl+
QShortcut *shortcutZoomOut = new QShortcut(QKeySequence(tr("Ctrl+-", "File|Zoom Out")), this); 设置缩小为Ctrl-
//函数中的 File | Zoom in\on 是一种声明用处的描述,可以空着
// 连接快捷键信号到槽
connect(shortcutZoomIn, &QShortcut::activated, [=](){ zoomIn(); });
connect(shortcutZoomOut, &QShortcut::activated, [=](){ zoomOut(); });
// 设置布局以适应窗口大小变化
this->setLayout(ui->verticalLayout);
// 连接comboBox的currentIndexChanged信号到槽
connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));
// 连接textEdit的cursorPositionChanged信号到槽
connect(ui->textEdit, SIGNAL(cursorPositionChanged()), this, SLOT(onCursorPositionChanged()));
}
Widget::~Widget() // 析构器
{
delete ui; // 释放UI类的指针
}
// 放大字体
void Widget::zoomIn()
{
QFont font = ui->textEdit->font(); // 获取TextEdit的字体
int fontSize = font.pointSize(); // 获取字体大小
if(fontSize != -1) { // 检查字体大小是否有效
int newFontSize = fontSize + 1; // 新的字体大小
font.setPointSize(newFontSize); // 设置新的字体大小
ui->textEdit->setFont(font); // 应用新的字体
}
}
// 缩小字体
void Widget::zoomOut()
{
QFont font = ui->textEdit->font(); // 获取TextEdit的字体
int fontSize = font.pointSize(); // 获取字体大小
if(fontSize != -1) { // 检查字体大小是否有效
int newFontSize = fontSize - 1; // 新的字体大小
font.setPointSize(newFontSize); // 设置新的字体大小
ui->textEdit->setFont(font); // 应用新的字体
}
}
函数中的 File | Zoom in\on 是一种声明用处的描述,可以空着
使用时一定要将函数放到头文件中声明,建议放到 public 中