【Qt】常用控件(按钮/单选按钮/复选按钮/QLabel)

本文详细介绍了Qt中的按钮类控件(QPushButton、QRadioButton和QCheckBox),以及显示类控件QLabel的使用方法,包括设置图标、快捷键、文本格式和布局。特别关注了如何在控件间进行伙伴绑定,如与单选按钮和复选按钮的交互。
摘要由CSDN通过智能技术生成


需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


目录

一、按钮类控件

1、QPushButton(按钮)

1.1pushButtn中插入图片(void setIcon(const QIcon &icon);)

1.2给按钮插入图片并设置快捷键或组合快捷键(void setShortcut(const QKeySequence &key)

2、QRadioButton(单选按钮)

2.1使用单选按钮进行单选(setEnabled、setCheckable、setChecked)

2.2单选按钮的槽函数

2.3使用单选按钮实现模拟点餐的功能(QButtonGroup类对单选按钮分组)

3、QCheckBox(复选按钮)

二、显示类控件

1、QLabel(显示文本和图片)

1.1设置文本类型(void setTextFormat(Qt::TextFormat);)

1.2在文本中设置图片并充满(void setScaledContents(bool);+重写resizeEvent事件)

1.3文本格式相关的API

1.3.1设置文本的方向

1.3.2设置文本自动换行

1.3.3设置缩进

1.3.4设置文本的边距

2、QLabel伙伴(使用QLabel对单选按钮/复选按钮进行绑定)


一、按钮类控件

QPushButton继承自QAbstractButton,这是一个抽象类,是其他按钮的父类。

继承关系:

属性

说明

text

按钮中的文本

icon

按钮中的图标

iconSize

按钮中图标的尺寸

shortCut

按钮中对应的快捷键

autoRepeat

按钮是否会被重复触发。

当鼠标左键按住不放时,如果设置为true,则会持续产生鼠标点击事件;如果设置为false,则必须释放鼠标,再次按下鼠标时才能产生点击事件。

autoRepeatDelay

按住按钮多久之后,开始重复触发

autoRepeatlnterval

重复触发周期

1、QPushButton(按钮)

QAbstractButton中。和QPushButton相关性较大的属性:

1.1pushButtn中插入图片(void setIcon(const QIcon &icon);)

1.2给按钮插入图片并设置快捷键或组合快捷键(void setShortcut(const QKeySequence &key)

设置的const QKeySequence &key可以是单个按键,也可能是组合键。

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 设置target按钮的图标及大小
    ui->pushButtonTarget->setIcon(QIcon("://C:/Users/86151/Desktop/Qt.jpg"));
    ui->pushButtonTarget->setIconSize(QSize(120, 120));
    // 设置上下左右图标及大小
    ui->pushButtonUp->setIcon(QIcon("://C:/Users/86151/Desktop/up.png"));
    ui->pushButtonUp->setIconSize(QSize(100, 100));
    ui->pushButtonDown->setIcon(QIcon("://C:/Users/86151/Desktop/down.png"));
    ui->pushButtonDown->setIconSize(QSize(100, 100));
    ui->pushButtonLeft->setIcon(QIcon("://C:/Users/86151/Desktop/left.png"));
    ui->pushButtonLeft->setIconSize(QSize(100, 100));
    ui->pushButtonRight->setIcon(QIcon("://C:/Users/86151/Desktop/right.png"));
    ui->pushButtonRight->setIconSize(QSize(100, 100));

    // 对上下左右四个按键设置键盘快捷键
    // 方式1:设置字母
    // ui->pushButtonUp->setShortcut(QKeySequence("ctrl + w"));
    // ui->pushButtonDown->setShortcut(QKeySequence("s"));
    // ui->pushButtonLeft->setShortcut(QKeySequence("a"));
    // ui->pushButtonRight->setShortcut(QKeySequence("d"));

    // 方式二:设置枚举
     ui->pushButtonUp->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W)); // 组合按键
     ui->pushButtonDown->setShortcut(QKeySequence(Qt::Key_S));
     ui->pushButtonLeft->setShortcut(QKeySequence(Qt::Key_A));
     ui->pushButtonRight->setShortcut(QKeySequence(Qt::Key_D));

     // 开启鼠标点击的连发功能(快捷键默认开启连发功能,单鼠标没有,需要手动设置)
     ui->pushButtonUp->setAutoRepeat(true);
     ui->pushButtonDown->setAutoRepeat(true);
     ui->pushButtonLeft->setAutoRepeat(true);
     ui->pushButtonRight->setAutoRepeat(true);
}

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


void Widget::on_pushButtonUp_clicked()
{
    // 获取到target的位置
    QRect rect = ui->pushButtonTarget->geometry();
    ui->pushButtonTarget->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}

void Widget::on_pushButtonDown_clicked()
{
    // 获取到target的位置
    QRect rect = ui->pushButtonTarget->geometry();
    ui->pushButtonTarget->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}

void Widget::on_pushButtonLeft_clicked()
{
    // 获取到target的位置
    QRect rect = ui->pushButtonTarget->geometry();
    ui->pushButtonTarget->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}

void Widget::on_pushButtonRight_clicked()
{
    // 获取到target的位置
    QRect rect = ui->pushButtonTarget->geometry();
    ui->pushButtonTarget->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

注意:使用快捷键按住不放是会一直发生移动的,而使用鼠标按住不放则不会产生一直移动的效果,必须手动开启鼠标的长按连发功能。 

2、QRadioButton(单选按钮)

QAbstractButton中和QRadioButton关系较大的属性:

属性

说明

setEnabled/setDisabled

设置按钮能否被选中

setCheckable

是否能选中,若设置为false,虽然不能选中,但是仍旧会响应点击事件

setChecked

是否已经被选中,checkable是checked的前提条件(可以用这个函数设置默认选中状态)

autoExclusive

是否排他,选中一个按钮之后是否会取消其他按钮的选中,对于QRadioButton来说默认是排他

2.1使用单选按钮进行单选(setEnabled、setCheckable、setChecked)

2.2单选按钮的槽函数

2.3使用单选按钮实现模拟点餐的功能(QButtonGroup类对单选按钮分组)

由于单选按钮存在排他机制,当存在多个单选按钮想要选中时,需要进行分组。

3、QCheckBox(复选按钮)

QAbstractButton中和QRadioButton关系较大的属性:

属性

说明

setCheckable

是否能选中,若设置为false,虽然不能选中,但是仍旧会响应点击事件

setChecked/isCheaked

是否已经被选中,checkable是checked的前提条件(可以用这个函数设置默认选中状态)

tristate

三态复选框(冷门)

二、显示类控件

1、QLabel(显示文本和图片)

QLabel适合仅显示不编辑的场景。

重要属性如下:

属性

说明

text

QLabel中的文本

textFormat

文本的格式:

Qt::PlainText 纯文本

Qt::RichText 富文本(支持html标签)

Qt::MarkdownText markdown格式

Qt::AutoText 根据文本内容自动决定文本格式

pixmap

QLabel内部包含的图片(用于设置图片)

scaledContents

设置为true表示内容自动拉伸填充。反之则不会(一般配合pixmap用于拉伸填充图片)

alignment

对齐方式,可以设置水平和垂直方向如何对齐

wordWrap

设置为true内部文本会自动换行,反之则不会

indent

设置文本缩进,水平和垂直方向都生效

margin

内部文本和边框中间的边距

它不同于indent,它在上下左右四个方向都同时有效

而indent最多只有两个方向生效(具体哪两个方向取决于alignment)

openExternallinks

是否允许打开一个外部链接,当QLabel内容包含url的时候才涉及

buddy

给QLabel关联一个"伙伴",这样点击QLabel时就能激活对应的伙伴。例如伙伴如果是一个QCheckBox,那么该QCheckBox将会被选中。(QLabel特有的机制)

1.1设置文本类型(void setTextFormat(Qt::TextFormat);)

1.2在文本中设置图片并充满(void setScaledContents(bool);+重写resizeEvent事件)

当用户手动拖拽窗口大小时,就会触发resize事件,把窗口大小从A大小拖拽变成B大小会触发一连串的resizeEvent。

为了让label中的图片随时充满整个widget,可以让Widget窗口类,重写父类(QWidget)的resizeEvent虚函数。(将其改成每次触发一个resizeEvent事件都会去调用一次对应的虚函数)

1.3文本格式相关的API

1.3.1设置文本的方向

设置文本的方向只要考虑两个方向:水平方向(靠左、居中、靠右)和垂直方向(靠上、居中、靠下)。两两组合即可。

ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // 水平居中 | 垂直居中

1.3.2设置文本自动换行

1.3.3设置缩进

Qt中的indent缩进,是每一行都会缩的。indent最多只有两个方向生效(具体哪两个方向取决于对齐方式alignment)

1.3.4设置文本的边距

2、QLabel伙伴(使用QLabel对单选按钮/复选按钮进行绑定)

Qt中,可以在QLabel的文本中使用“&”符号来表示快捷键。例如label中写道:“哈哈哈&A”,那么就可以通过Alt + a键来对绑定的单选按钮/复选按钮进行快速选定。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋灵瑜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值