【Qt】按钮类控件(二)

按钮类控件

1、Push Button

使⽤ QPushButton 表示⼀个按钮. 这也是当前我们最熟悉的⼀个控件了.
QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的父类.
在这里插入图片描述

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

事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单.
其中 default 和 audoDefault 影响的是按下 enter 时⾃动点击哪个按钮的⾏为; flat 把按钮设置为扁平的样式. 这⾥我们暂时都不做过多关注

代码示例: 带有图标的按钮
  1. 创建 resource.qrc ⽂件, 并导⼊图⽚
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->setupUi(this);
    QIcon icon(":/button_blud.png");
    ui->pushButton->setIcon(icon);
    ui->pushButton->setIconSize(QSize(100,100));//这里并不能直接使用,需要使用QSize对象进行传入
}

Alt

代码示例: 带有快捷键的按钮

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include<QIcon>
#include<QRect>
#include<QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton_target->setIcon(QIcon(":/image/dog.png"));
    ui->pushButton_target->setIconSize(QSize(160,160));

    //鼠标点击
    ui->pushButton_up->setIcon(QIcon(":/image/up.png"));
    ui->pushButton_down->setIcon(QIcon(":/image/down.png"));
    ui->pushButton_left->setIcon(QIcon(":/image/left.png"));
    ui->pushButton_right->setIcon(QIcon(":/image/right.png"));

    //快捷键
    //ui->pushButton_up->setShortcut('W');//更推荐下面的方法,因为上面的方法并不会报错使用下面的更加谨慎
    ui->pushButton_up->setShortcut(Qt::Key::Key_W);
    ui->pushButton_down->setShortcut(Qt::Key::Key_S);
    ui->pushButton_left->setShortcut(Qt::Key::Key_A);
    ui->pushButton_right->setShortcut(Qt::Key::Key_D);

    //设置重复触发,快捷键是默认就有重复触发的,但是鼠标点击没有
    ui->pushButton_up->setAutoRepeat(true);
    ui->pushButton_down->setAutoRepeat(true);
    ui->pushButton_left->setAutoRepeat(true);
    ui->pushButton_right->setAutoRepeat(true);
}

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

void Widget::on_pushButton_up_clicked()
{
    const QRect& rect=ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x(),rect.y()-10,rect.width(),rect.height());
    qDebug()<<"up";
}

void Widget::on_pushButton_down_clicked()
{
    const QRect& rect=ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x(),rect.y()+10,rect.width(),rect.height());
    qDebug()<<"up";
}

void Widget::on_pushButton_left_clicked()
{
    const QRect& rect=ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x()-10,rect.y(),rect.width(),rect.height());
    qDebug()<<"up";
}

void Widget::on_pushButton_right_clicked()
{
    const QRect& rect=ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x()+10,rect.y(),rect.width(),rect.height());
    qDebug()<<"up";
}

• 使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表⽰⼀个按键序列. ⽀持组合键 (ctrl + c 这种).
• QKeySequence 的构造函数参数, 可以直接使⽤ “ctrl+c” 这样的按键名字符串表示例, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表示。

1 // 开启重复触发
2 ui->pushButton_up->setAutoRepeat(true);
3 ui->pushButton_down->setAutoRepeat(true);
4 ui->pushButton_left->setAutoRepeat(true);
5 ui->pushButton_right->setAutoRepeat(true);

重复触发,快捷键是默认是支持重复触发的,鼠标是默认不支持的,但是鼠标重复触发是支持修改的,但是快捷键重复触发是修改不了的。

在这里插入图片描述

2、Radio Buttion

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

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

代码示例: 选择性别

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置一个默认的选项
    ui->radioButton->setChecked(true);
    ui->label->setText("您默认的性别是:男");

    //禁用其他选项
    //checkable 只是能够让按钮不被选中,但是仍然是可以响应点击事件的。
    //ui->radioButton_3->setCheckable(false);
    ui->radioButton_3->setEnabled(false);
    //ui->radioButton_3->setDisabled(true);
}

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

void Widget::on_radioButton_clicked()
{
    ui->label->setText("您选择的性别是:男");
}

void Widget::on_radioButton_2_clicked()
{
    ui->label->setText("您选择的性别是:女");
}

void Widget::on_radioButton_3_clicked()
{
    ui->label->setText("您选择的性别是:其他");
}

在这里插入图片描述

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

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

在这里插入图片描述

在这里简单的介绍一下信号,clicked()=pressed()+released();
clicked(bool) bool就表示radiobutton是否被选中的状态,当它被设置为setCheckable(false);不可选中的状态时,bool就会一直是false
toggled(bool),就表示当bool状态发生改变,就会触发这个信号。当点击他这个按钮时会触发按钮,bool并为true,当点击别的按钮时,就会触发toggled(),bool并为false。

clicked(bool)

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //ui->radioButton->setCheckable(false);
}

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

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

在这里插入图片描述

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

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

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

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

按顺序点击按钮,并在最后再次点击clicked(bool)
.在这里插入图片描述

• clicked 是⼀次⿏标按下+⿏标释放触发的.
• pressed 是⿏标按下触发的.
• released 是⿏标释放触发的.
• toggled 是 checked 属性改变时触发的.
总的来说, toggled 是最适合 QRadioButton 的

代码示例: 单选框分组(QButtonGroup)

如果不进行分组处理,那我们的所有组就只能点击一个按钮,因为全是单选按钮

#include "widget.h"
#include "ui_widget.h"
#include<QButtonGroup>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //使用QButtonGroup对单选按钮进行分组
    QButtonGroup* g1=new QButtonGroup(this);
    QButtonGroup* g2=new QButtonGroup(this);
    QButtonGroup* g3=new QButtonGroup(this);

    //把按钮进行分组
    g1->addButton(ui->radioButton);
    g1->addButton(ui->radioButton_2);
    g1->addButton(ui->radioButton_3);

    g2->addButton(ui->radioButton_4);
    g2->addButton(ui->radioButton_5);
    g2->addButton(ui->radioButton_6);

    g3->addButton(ui->radioButton_7);
    g3->addButton(ui->radioButton_8);
}

在这里插入图片描述

3、 Check Box

QCheckBox 表⽰复选按钮. 可以允许选中多个.
和 QCheckBox 最相关的属性也是 checkable 和 checked , 都是继承⾃QAbstractButton .

代码示例: 获取复选按钮的取值
QString result="索大的刀是:";
void Widget::on_checkBox_clicked(bool checked)
{
    if(checked)
    {
        result+=ui->checkBox->text()+" ";
        ui->label->setText(result);
    }
}

void Widget::on_checkBox_6_clicked(bool checked)
{
    if(checked)
    {
        result+=ui->checkBox_6->text()+" ";
        ui->label->setText(result);
    }
}

void Widget::on_checkBox_8_clicked(bool checked)
{
    if(checked)
    {
        result+=ui->checkBox_8->text();
        ui->label->setText(result);
    }
}

在这里插入图片描述

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的软件开发框架,它的主要目标是提供开发者一个高效、易于学习和使用的工具,使他们能够创建运行于不同平台上的应用程序。Qt不仅仅是一个GUI(图形用户界面)工具,它还提供了多种实用的功能和类库,其中之一就是件的增减。 在Qt中,通过创建一个按钮并添加一个槽函数来实现件的增减。首先,我们需要在Qt程序中创建一个按钮。在代码中,可以使用QPushButton类来实现按钮的创建,并且需要给这个按钮添加一个名称,在这个例子中为“Button1”: QPushButton *Button1 = new QPushButton(“Add Control”); 接下来,我们需要为这个按钮添加一个槽函数,用于响应按钮的点击事件。这个槽函数可以在主窗口的类中定义,可以在“mainwindow.h”文件中进行定义,然后在“mainwindow.cpp”文件中进行实现。 void MainWindow::on_Button1_clicked() { //button clicked } 现在我们已经创建了按钮并为它添加了槽函数。在槽函数中,我们可以定义如何增加或减少件。增加件的方法可以是创建一个新的件并在窗口中添加它,或者是将一个已有的件“展开”,使它变得可见。 例如,我们可以添加一个文本框件: QLineEdit *Edit1 = new QLineEdit(this); Edit1->setGeometry(10,10,200,30); 我们可以在按钮的点击事件中调用这个件来实现“增加件”的功能: QLineEdit *Edit1 = new QLineEdit(this); Edit1->setGeometry(10,10,200,30); 或者我们可以使用布局管理器来自动管理件的布局,而不是手工设置位置和大小。在这个例子中使用QVBoxLayout布局管理器: QVBoxLayout *layout = new QVBoxLayout; QWidget *widget = new QWidget; QLineEdit *Edit1 = new QLineEdit(widget); layout->addWidget(Edit1); widget->setLayout(layout); setCentralWidget(widget); 这样,每当我们点击按钮,它就会自动将一个新文本框件添加到布局中。 总之,Qt提供了多种实现件增减的方法,开发者可以根据自己的需求来选择最适合自己的方法。无论是手工布局还是使用布局管理器,Qt 的灵活性和易用性都可以为我们带来方便和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值