QT-快捷键-记事本文字放大缩小

一、QShortcut 类

QShortcut简介

  QShortcut类允许你为你的应用程序定义快捷键。当快捷键被按下时,QShortcut可以触发一个槽函数,或者它可以直接激活一个QWidget

创建QShortcut对象

  QShortcut可以通过多种构造函数创建,其中最常见的形式是:

   QShortcut(QKeySequence key, QWidget *parent, const char *member = 0, QObject *receiver = 0, Qt::ShortcutContext context = Qt::WindowShortcut);
  • keyQKeySequence类型,表示快捷键的键序。你可以直接使用QKeySequence::StandardKey枚举值,或者构建一个自定义的QKeySequence

  • parentQWidget的指针,表示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+CQKeySequence对象。this作为parent参数,意味着快捷键只在MainWindow窗口激活时生效。activated信号被连接到MainWindowcopy槽函数,当快捷键被按下时,copy函数将被调用。

总结

  QShortcut是Qt中用于处理快捷键的重要类。通过使用QShortcut,你可以轻松地为应用程序添加键盘快捷方式,增强用户体验和应用程序的可访问性。

二、connect

connect(shortcutZoomIn, &QShortcut::activated, [=](){ zoomIn(); });
  1. connect函数connect是Qt中的一个函数,用于将一个对象的信号(signal)连接到另一个对象的槽(slot)。当信号被发射时,相应的槽会被调用。

  2. shortcutZoomIn: 这是一个QShortcut对象,它代表了一个快捷键。当这个快捷键被按下时,QShortcut对象的activated信号将被触发。

  3. &QShortcut::activated: 这是QShortcut类的activated信号的指针。activated信号在快捷键被按下时发射。

  4. [=](){ zoomIn(); }: 这是一个lambda表达式,它捕获当前作用域内的所有变量(通过值捕获,即[=])。当lambda表达式被调用时,它会执行zoomIn函数。lambda表达式在现代C++中提供了一种简洁的方法来定义匿名函数。

  5. zoomIn函数: 这个函数是lambda表达式内部调用的目标,它通常定义在类中,用于实现缩放功能,例如增大字体大小或增加图像的缩放级别。

整个语句的作用是:当shortcutZoomIn对象检测到其关联的快捷键被按下时,activated信号将被发射,这将触发connect函数中定义的lambda表达式,进而调用zoomIn函数。因此,每次按下shortcutZoomIn的快捷键时,zoomIn函数都会被执行,实现相应的缩放行为。

Lambda函数的介绍icon-default.png?t=N7T8https://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 中

你可能感兴趣的:(QT,学习路程,qt,开发语言)