[Qt]常用控件介绍-按钮类控件
目录
1.QPushButton按钮
介绍
属性
Demo:键盘方向键控制人物移动
2.Redio Button按钮
属性
clicked、pressed、released、toggled区别
单选按钮的分组
Demo:点餐小程序
3.CheckBox按钮
属性
Demo:获取今天的形成计划
4.ToolButton按钮
1.QPushButton按钮
介绍
QPushButton是继承与一个QAbstractButton类,这个类是一个抽象的类,类内部包含了按钮类所需要的纯虚函数,是所有按钮的一个父类。在Qt Designer中也可以看到继承关系。
属性
属性 | 说明 |
text | 按钮的文本 |
icon | 按钮中的图标 |
iconSize | 按钮中图标的一个尺寸 |
shortCut | 按钮对应的一个快捷 |
autoRepeat | 按钮是否会重复触发,当鼠标按住不放的时候,如果设置为true的话,会持续产生鼠标点击事件,如果欸false的话,则需要释放鼠标,再次点击才会触发鼠标点击事件。 |
autoRepeatDelay | 重复触发的延迟事件,按钮按住多久,才会触发第二次的鼠标点击事件 |
autoRepeatInterval | 重复触发的周期 |
Demo:键盘方向键控制人物移动
流程:放置按钮并设置图标-->按钮绑定槽函数-->设置快捷键-->开启按键连续触发
对于快捷键的设置,需要传递一个QKeySequence对象参数,所以我们在设置时,要将快捷键设置在QKeySequence生成一个对象在传递给setShortCut函数。对于快捷键的设置可以是组合建,直接写入xx + xx字符串即可。对于上述的快捷键设置虽然说简单,但是没有安全性检查,对于Qt内部内置了一系列的枚举按键,可以使用枚举类型的变量设置快捷键,可以很好的检查快捷键的正确性。其实对于组合键的设置,是两个位图的相加。
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton_false->setEnabled(false);
//设置被移动的图片和大小
ui->pushButton_people->setIcon(QIcon(":/people.png"));
ui->pushButton_people->setIconSize(QSize(500, 500));
//设置方向键的图标
ui->pushButton_up->setIcon(QIcon(":/up.png"));
ui->pushButton_down->setIcon(QIcon(":/down.png"));
ui->pushButton_left->setIcon(QIcon(":/left.png"));
ui->pushButton_right->setIcon(QIcon(":/right.png"));
//设置快捷键--方式1
// ui->pushButton_up->setShortcut(QKeySequence("w"));
// ui->pushButton_down->setShortcut(QKeySequence("s"));
// ui->pushButton_left->setShortcut(QKeySequence("a"));
// ui->pushButton_right->setShortcut(QKeySequence("d"));
//设置快捷键--方式2
ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));
ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
ui->pushButton_right->setShortcut(QKeySequence(Qt::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()
{
//首先获取到人物的位置
QRect rect = ui->pushButton_people->geometry();
//基于上次的位置设置新的位置
ui->pushButton_people->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}
//向下移动的按钮
void Widget::on_pushButton_down_clicked()
{
//首先获取到人物的位置
QRect rect = ui->pushButton_people->geometry();
//基于上次的位置设置新的位置
ui->pushButton_people->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}
//向左移动的按钮
void Widget::on_pushButton_left_clicked()
{
//首先获取到人物的位置
QRect rect = ui->pushButton_people->geometry();
//基于上次的位置设置新的位置
ui->pushButton_people->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}
//向右移动的按钮
void Widget::on_pushButton_right_clicked()
{
//首先获取到人物的位置
QRect rect = ui->pushButton_people->geometry();
//基于上次的位置设置新的位置
ui->pushButton_people->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}
2.Redio Button按钮
该按钮是一个单选的按钮,可以让我们在多个选项中选中一个。
属性
属性 | 说明 |
checkable | 是否可以被选中 |
checked | 起初的时候,是否已经被选中 |
autoExclusive | 是否排他,也就是说选中一个按钮之后是否会取消其他按钮的选中结果,默认来说是排他的。 |
对于RedioButton来说,内部会有一个是否被选中的属性,这个属性不需要我们去手动改变,无论是PushButton触发的chicked信号,还是RedioButton触发的toggle信号都是由按钮自身检测到内部状态的变化而触发的信号,所以内部状态变化就包含了更新选中与为选中状态的字段了。
clicked、pressed、released、toggled区别
clicked是一次完整的点击后,触发点击信号,也就是鼠标按下并释放后触发,如果说释放的时候鼠标不在按钮的范围内也是不会触发的。pressed是鼠标按下就触发。released是鼠标释放就会触发,此时署鼠标释放的时候不管在哪里都会触发。toggled是checked属性改变的时候触发。也就是说连续点击的时候,不会触发信号,因为按钮的checked状态是没有改变的。
单选按钮的分组
对于单选按钮有排他的属性,那我们如果向设置几个不同类别的排他选项怎么办呢,Qt内置了一个QButtonGroup类,可以实例化出按钮组的对象,内部提供了addButton接口函数,可以将我们创建的RedioButton添加到该对象内部,在一个对象内部的单选按钮就是分在了一个组。
Demo:点餐小程序
#include <QButtonGroup>
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);
group1->addButton(ui->radioButton_3);
group2->addButton(ui->radioButton_4);
group2->addButton(ui->radioButton_5);
group2->addButton(ui->radioButton_6);
group3->addButton(ui->radioButton_7);
group3->addButton(ui->radioButton_8);
}
3.CheckBox按钮
该按钮是一个复选按钮,可以允许选中多个,没有排他的属性。
属性
属性 | 说明 |
checked | 是否被选中 |
checkable | 是否可以被选中 |
Demo:获取今天的形成计划
4.ToolButton按钮
QToolButton的大部分功能和QPushButton是一致的,但是QToolButton主要是应用于工具栏,菜单栏等场景。