第十一篇:布局管理-设置伙伴(buddy)

设置伙伴(buddy)

在用户界面开发中,为控件设置快捷键是一种提高用户操作效率的重要手段。在 Qt 中,通过 QLabel 和它的 伙伴机制(Buddy Mechanism),我们可以快速实现键盘快捷操作,让用户通过键盘轻松聚焦到某个控件上。本文将详细讲解 Qt 中伙伴设置的原理和实现。

什么是伙伴机制?

伙伴机制 是 Qt 提供的一种功能,允许开发者通过标签(QLabel)为某个控件(如 QLineEdit)设置一个快捷键(通常是 Alt+字母 的组合)。当用户按下快捷键时,焦点会自动切换到标签绑定的控件。

  • 关键点
  1. 加速键(Accelerator Key):通过 & 定义快捷键,比如 &Name 中的 N 是加速键。
  2. 设置伙伴(Buddy):通过 QLabel::setBuddy(QWidget *widget) 方法将 QLabel 与目标控件绑定。

如何实现?

通过 Qt 设计师界面

编辑伙伴(Buddy)是位于 Qt 设计师界面中的一个工具。设置完成后如图所示:

在这里插入图片描述

具体步骤:

  1. 拖入相应控件,并设置 QLabel 加速键,例如第一个 QLabel,text 设置为"&Button"
  2. 点击界面上的"编辑伙伴"按钮进入编辑状态,长按鼠标左键,拖动使 QLabel 与其相应控件形成伙伴关系,会出现箭头
  3. F3 保存,退出编辑伙伴模式(要是想删除个别关系,可点击连接线,右键删除)

通过代码

示例代码

#include <QWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QCheckBox>
#include <QLineEdit>
#include <QSpinBox>

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = nullptr)
        : QWidget(parent)
    {
        setWindowTitle("编辑伙伴(Buddy)");

        // 创建布局
        auto gridLayout = new QGridLayout;

        // 创建部件
        label = new QLabel("&Button:");
        pushButton = new QPushButton("PushButton");
        label->setBuddy(pushButton); // 设置伙伴关系

        label_2 = new QLabel("C&heckBox:");
        checkBox = new QCheckBox("CheckBox");
        label_2->setBuddy(checkBox); // 设置伙伴关系

        label_3 = new QLabel(QStringLiteral("输入框(&L):"));
        lineEdit = new QLineEdit;
        label_3->setBuddy(lineEdit); // 设置伙伴关系

        label_4 = new QLabel(QStringLiteral("数字输入(&N):"));
        spinBox = new QSpinBox;
        label_4->setBuddy(spinBox); // 设置伙伴关系

        // 添加部件到布局
        gridLayout->addWidget(label, 0, 0);
        gridLayout->addWidget(pushButton, 0, 1);

        gridLayout->addWidget(label_2, 1, 0);
        gridLayout->addWidget(checkBox, 1, 1);

        gridLayout->addWidget(label_3, 2, 0);
        gridLayout->addWidget(lineEdit, 2, 1);

        gridLayout->addWidget(label_4, 3, 0);
        gridLayout->addWidget(spinBox, 3, 1);

        // 设置布局到窗口
        setLayout(gridLayout);
    }

private:
    QLabel *label;
    QPushButton *pushButton;
    QLabel *label_2;
    QCheckBox *checkBox;
    QLabel *label_3;
    QLineEdit *lineEdit;
    QLabel *label_4;
    QSpinBox *spinBox;
};

界面展示

在这里插入图片描述

可以使用加速键 Alt+B,快速切换到 PushButton,Alt+h 快速切换到CheckBox等~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值