【Qt开发】常用控件(六)

目录

[1 -> font](#1 -> font)

[1.1 -> 相关 API](#1.1 -> 相关 API)

[1.2 -> 代码示例](#1.2 -> 代码示例)

[1.2.1 -> 在 Qt Designer 中设置字体属性](#1.2.1 -> 在 Qt Designer 中设置字体属性)

[1.2.2 -> 在代码中设置字体属性](#1.2.2 -> 在代码中设置字体属性)

[2 -> toolTip](#2 -> toolTip)

[2.1 -> 相关 API](#2.1 -> 相关 API)

[2.2 -> 代码示例](#2.2 -> 代码示例)

[3 -> focusPolicy](#3 -> focusPolicy)

[3.1 -> 相关 API](#3.1 -> 相关 API)

[3.2 -> 代码示例](#3.2 -> 代码示例)


1 -> font

1.1 -> 相关 API

|---------------------------------|-----------------------------------|
| API | 说明 |
| font() | 获取当前 widget 的字体信息。返回 QFont 对象 |
| setFont(const QFont& font) | 设置当前 widget 的字体信息 |

关于 QFont

|---------------|-------------------------------------------------------------|
| 属性 | 说明 |
| family | 字体家族。比如 "楷体","宋体","微软雅黑" 等 |
| pointSize | 字体大小 |
| weight | 字体粗细。以数值方式表示粗细程度取值范围为 [0,99],数值越大,越粗 |
| bold | 是否加粗。设置为 true,相当于 weight 为 75。设置为 false 相当于 weight 为 50 |
| italic | 是否倾斜 |
| underline | 是否带有下划线 |
| strikeOut | 是否带有删除线 |

1.2 -> 代码示例

1.2.1 -> 在 Qt Designer 中设置字体属性

1. 在界面上创建一个 label

2. 在右侧的属性编辑区,设置该 label 的 font 相关属性

在这里调整上述属性,可以实时的看到文字的变化。

3. 执行程序,观察效果

1.2.2 -> 在代码中设置字体属性

1. 在代码中创建 label,objectName 使用默认的 label

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>

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

    QLabel* label = new QLabel(this);
    label->setText("这是一段文本!!!");
}

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

2. 修改 widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>

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

    QLabel* label = new QLabel(this);
    label->setText("这是一段文本!!!");

    // 创建字体对象
    QFont font;

    // 字体家族
    font.setFamily("楷体");
    // 字体大小
    font.setPixelSize(30);
    // 是否加粗
    font.setBold(true);
    // 是否倾斜
    font.setItalic(true);
    // 是否带下划线
    font.setUnderline(true);
    // 是否带删除线
    font.setStrikeOut(true);

    // 把font对象设置到label中
    label->setFont(font);
}

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

3. 运行程序,观察效果

2 -> toolTip

2.1 -> 相关 API

|----------------------|--------------------------------------------------|
| API | 说明 |
| setToolTip | 设置 toolTip 鼠标悬停在该 widget 上时会有提示说明 |
| setToolTipDuring | 设置 toolTip 提示的时间。单位 ms 时间到后 toolTip 自动消失 |

toolTip 只是给用户看的。在代码中一般不需要获取到 toolTip。

2.2 -> 代码示例

设置按钮的 toolTip

1. 在界面上拖放两个按钮。objectName 设置为 pushButton_yes 和 pushButton_no

2. 编写 widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

    // 设置两个按钮的ToolTip
    ui->pushButton_yes->setToolTip("有惊喜");
    ui->pushButton_yes->setToolTipDuration(5000);

    ui->pushButton_no->setToolTip("没有惊喜");
    ui->pushButton_no->setToolTipDuration(2000);
}

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

3. 运行程序,观察效果

可以看到鼠标停到按钮上之后,就能弹出提示,时间到后自行消失。

3 -> focusPolicy

设置控件获取到焦点的策略。比如某个控件能否用鼠标选中或者能否通过 tab 键选中。

所谓 "焦点",指的就是能选中这个元素。对于 输入框,单选框,复选框等控件非常有用。

3.1 -> 相关 API

|--------------------------------------------|-------------------------------------------------|
| API | 说明 |
| focusPolicy() | 获取该 widget 的 focusPolicy,返回 Qt::FocusPolicy |
| setFocusPolicy(Qt::FocusPolicy policy) | 设置 widget 的 focusPolicy |

Qt::FocusPolicy 是一个枚举类型。取值如下

  • Qt::NoFocus:控件不会接收键盘焦点
  • Qt::TabFocus:控件可以通过 Tab 键接收焦点
  • Qt::ClickFocus:控件在鼠标点击时接收焦点
  • Qt::StrongFocus:控件可以通过 Tab 键和鼠标点击接收焦点(默认值)
  • Qt::WheelFocus:类似于 Qt::StrongFocus,同时控件也通过鼠标滚轮获取到焦点(新增的选项)

3.2 -> 代码示例

理解不同的 focusPolicy

1. 在界面上创建四个单行输入框(Line Edit)

2. 修改四个输入框的 focusPolicy 属性为 Qt::StrongFocus(默认值,一般不用额外修改)

运行程序,可以看到,使用鼠标单击/Tab,就可以移动光标所在的输入框。从而接下来的输入就是针对这个获取焦点的输入框展开的了。

3. 修改第二个输入框的 focusPolicy 为 Qt:: NoFocus,则第二个输入框不会被 Tab/鼠标左键选中。

此时这个输入框也就无法输入内容了。

4. 修改第三个输入框 focusPolicy 为 Qt::TabFocus,则只能通过 Tab 选中,无法通过鼠标选中。

5. 修改第四个输入框 focusPolicy 为 Qt::ClickFocus,则只能通过 Tab 选中,无法通过鼠标选中。


感谢各位大佬支持!!!

互三啦!!!