【Qt】Qt 按钮控件详解,PushButton,RadioButton,CheckBox,ToolButton

🍑个人主页:Jupiter.
🚀 所属专栏:QT
欢迎大家点赞收藏评论😊

在这里插入图片描述

在这里插入图片描述


📚按钮类控件

🍑Push Button

QPushButton 表⽰⼀个按钮. QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类。

在 Qt Designer 中也能够看到这⾥的继承关系

QAbstractButton 中, 和 QPushButton 相关性较⼤的属性

属性说明
text按钮中的⽂本
icon按钮中的图标
iconSize按钮中图标的尺⼨
shortCut按钮对应的快捷键
autoRepeat按钮是否会重复触发. 当⿏标左键按住不放时,如果设为 true, 则会持续产⽣⿏标点击事件;如果设为 false, 则必须释放⿏标, 再次按下⿏标时才能产⽣点击事件.(相当于游戏⼿柄上的 “连发” 效果)
autoRepeatDelay重复触发的延时时间. 按住按钮多久之后, 开始重复触发.
autoRepeatInterval重复触发的周期.
  1. QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅列出 QAbstractButton 独有的属性.
  2. Qt 的 api 设计⻛格是⾮常清晰的. 此处列出的属性都是可以 获取 和 设置 的. 例如, 使⽤ text() 获取按钮⽂本; 使⽤ setText() 设置⽂本.

事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单。

示例:

	//设置图标+大小
    QIcon icon(":/dog.jpg");
    ui->pushButton->setIcon(icon);
    ui->pushButton->setIconSize(QSize(50,50));
    //设置文本+字体
    ui->pushButton->setText("点击就下载,开局就送!");
    QFont font;
    font.setBold(true);
    font.setFamily("宋体");
    ui->pushButton->setFont(font);
    //设置快捷键
    ui->pushButton->setShortcut(QKeySequence("y"));
    //设置为不连续触发
    ui->pushButton->setAutoRepeat(false);
	//设置位置与尺寸
    ui->pushButton->setGeometry(300,250,350,60);

编写Widget.hpp 设置为连续触发与按钮槽函数

//设置按钮的连续触发
    ui->pushButton->setAutoRepeat(true);

void Widget::on_pushButton_clicked()
{
    qDebug()<<"点击";
}

运行结果,点击按钮不动,会一直触发clicked信号。

🥥Radio Buttion

QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个.
作为 QAbstractButton 和 QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton同样适⽤.

QAbstractButton 中和 QRadioButton 关系较⼤的属性

属性说明
checkable是否能选中
checked是否已经被选中. checkable 是 checked 的前提条件.
autoExclusive是否排他,选中⼀个按钮之后是否会取消其他按钮的选中,对于 QRadioButton 来说默认就是排他的

代码⽰例: 选择性别

  1. 在界⾯上创建⼀个 label, 和 3 个 单选按钮 设置的⽂本如下图. 3 个单选按钮的 objectName 分别为 radioButton_male ,radioButton_female , radioButton_other
	QLabel* lab = new QLabel(this);
    lab->setText("  请选择你的性别为: ");
    lab->setGeometry(300,200,200,50);

    QRadioButton* Radbutton_male = new QRadioButton(this);
    Radbutton_male->setText("男");
    QRadioButton* Radbutton_female = new QRadioButton(this);
    Radbutton_female->setText("女");
    QRadioButton* Radbutton_other = new QRadioButton(this);
    Radbutton_other->setText("其他");

    Radbutton_male ->setGeometry(350,240,50,50);
    Radbutton_female ->setGeometry(350,280,50,50);
    Radbutton_other ->setGeometry(350,320,50,50);



    //设置Radbutton_1为不能选中状态
    Radbutton_male ->setCheckable(false);
    //设置Radbutton_2为可选中状态并且默认为选中
    Radbutton_female ->setCheckable(true);
    Radbutton_female ->setChecked(true);
    //设置radbutton_3为不排他
    Radbutton_other ->setAutoExclusive(false);

运行结果:
在这里插入图片描述

🍃click, press, release, toggled 的区别

代码⽰例: click, press, release, toggled 的区别

  • clicked 表⽰⼀次 “点击”
  • pressed 表⽰⿏标 “按下”
  • released 表⽰⿏标 “释放”
  • toggled 表⽰按钮状态切换.

1)示例:

创建一个按钮,并编写对应的槽函数。

void Widget::on_pushButton_clicked()
{
    qDebug()<<"clicked";
}

void Widget::on_pushButton_pressed()
{
    qDebug()<<"pressed";
}

void Widget::on_pushButton_released()
{
    qDebug()<<"released";
}

void Widget::on_pushButton_toggled(bool checked)
{
    (void)checked;
    qDebug()<<"toggled";
}

测试结果:

点击并释放,依次触发pressed,released,clicked信号,toggled 暂时测试不出来。

2)示例
在界⾯上创建四个单选按钮 objectName 分别为 radioButton , radioButton_2 , radioButton_3 ,radioButton_4

给 1 创建 clicked 槽函数, 给 2 创建 pressed 槽函数, 给 3 创建 released 槽函数,给 4 创建 toggled 槽函数

void Widget::on_radioButton_clicked()
{
 	qDebug() << "clicked";
}

void Widget::on_radioButton_2_pressed()
{
    qDebug() << "pressed";
}
void Widget::on_radioButton_3_released()
{
 	qDebug() << "released";
}
void Widget::on_radioButton_4_toggled(bool checked)
{
 	if (checked) 
 	{
 		qDebug() << "toggled checked true";
	} 
	else 
	{
 		qDebug() << "toggled checked false";
	}
}

运⾏程序, 可以看到

  • clicked 是⼀次⿏标按下+⿏标释放触发的.
  • pressed 是⿏标按下触发的.
  • released 是⿏标释放触发的.
  • toggled 是 checked 属性改变时触发的.

总的来说, toggled 是最适合 QRadioButton 的。

🍁引⼊ QButtonGroup 进⾏分组

示例:

默认这几个单选按钮都是排他的,意味着6个选项只能选择一个,不符合我们的预期,这时候就要引入分组,使其他们在一组内是排他的即可。

编写Widget.cpp

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


    //创建三个组
    QButtonGroup* group1 = new QButtonGroup(this);
    QButtonGroup* group2 = new QButtonGroup(this);
    QButtonGroup* group3 = new QButtonGroup(this);

    //将按钮分别加入到指定组
    group1->addButton(ui->radioButton);
    group1->addButton(ui->radioButton_2);

    group2->addButton(ui->radioButton_3);
    group2->addButton(ui->radioButton_4);

    group3->addButton(ui->radioButton_5);
    group3->addButton(ui->radioButton_6);
}

运行结果:

🐗Check Box

QCheckBox 表⽰复选按钮. 可以允许选中多个.
和 QCheckBox 最相关的属性也是 checkable 和 checked , 都是继承⾃QAbstractButton .
⾄于 QCheckBox 独有的属性 tristate ⽤来实现 “三态复选框” . 这个东西⽐较冷⻔。

代码⽰例: 获取复选按钮的取值

编写 pushButton的槽函数

void Widget::on_pushButton_clicked()
{
    //获取line Edit的内容
    QString str = ui->lineEdit->text();

    //分别判断
    if(ui->checkBox->isChecked())
    {
        str+=ui->checkBox->text()+" ";
    }
    if(ui->checkBox_2->isChecked())
    {
        str+=ui->checkBox_2->text()+" ";
    }
    if(ui->checkBox_3->isChecked())
    {
        str+=ui->checkBox_3->text()+" ";
    }

    ui->lineEdit->setText(str);
}

运行结果:

🍄Tool Button

QToolButton 的⼤部分功能, 和 QPushButton 是⼀致的. 但是 QToolButton 主要应⽤在⼯具栏, 菜单等场景. 在后面的章节再讲解。

  • 欢迎持续关注!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值