QT按钮控件




🌈个人主页: 南桥几晴秋
🌈C++专栏: 南桥谈C++
🌈C语言专栏: C语言学习系列
🌈Linux学习专栏: 南桥谈Linux
🌈数据结构学习专栏: 数据结构杂谈
🌈数据库学习专栏: 南桥谈MySQL
🌈Qt学习专栏: 南桥谈Qt
🌈菜鸡代码练习: 练习随想记录
🌈git学习: 南桥谈Git

🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 本科在读菜鸡一枚,指出问题及时改正



category: QT学习

代码仓库

QPushButton

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

  • QPushButton
  • QCheckBox
  • QWidget
  • QAbstractButton
  • QRadioButton
  • QToolButton
  1. QAbstractButton 作为 QWidget 的子类,当然也继承了 QWidget 的属性。

  2. Qt 的 API 设计风格是非常清晰的。

    例如,使用 text() 获取按钮文本;使用 setText() 设置文本。

例:带有图标的按钮

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QIcon icon(":/hamster.png");
    ui->pushButton->setIcon(icon);
    ui->pushButton->setIconSize(QSize(50,50));
}

例:带有快捷键的按钮

通过方向键,控制pushButton_target上下左右移动

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QIcon icon(":/dog.png");
    ui->pushButton_target->setIcon(icon);
    ui->pushButton_target->setIconSize(QSize(50,50));
    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"));
    //设置快捷键
    ui->pushButton_up->setShortcut(QKeySequence("w"));
    ui->pushButton_down->setShortcut(QKeySequence("s"));
    ui->pushButton_left->setShortcut(QKeySequence("a"));
    ui->pushButton_right->setShortcut(QKeySequence("d"));
}

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()-5,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()-5,rect.y(),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()+5,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()+5,rect.y(),rect.width(),rect.height());
    qDebug()<<"up";
}

按着鼠标可连续触发

cpp 复制代码
    //连续复发
    ui->pushButton_up->setAutoRepeat(true);
    ui->pushButton_down->setAutoRepeat(true);
    ui->pushButton_left->setAutoRepeat(true);
    ui->pushButton_right->setAutoRepeat(true);

RadioButtion

QRadioButton 是单选按钮,可以让我们在多个选项中选择一个。

作为 QAbstractButtonQWidget 的子类,上面介绍的属性和用法对 QRadioButton 同样适用。

QAbstractButton 中与 QRadioButton 关系较大的属性

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

例:选择性别

cpp 复制代码
void Widget::on_radioButton_man_clicked()
{
    ui->label->setText("你的性别为:男");
}

void Widget::on_radioButton_women_clicked()
{
    ui->label->setText("你的性别为:女");
}

void Widget::on_radioButton_other_clicked()
{
    ui->label->setText("你的性别为:其他");
}

设置为默认按钮

cpp 复制代码
//设置为默认按钮
ui->radioButton_man->setChecked(true);
ui->label->setText("你的性别为:男");

禁用按钮

cpp 复制代码
//禁用 其他 按钮
ui->radioButton_other->setCheckable(false);

上述代码虽然禁用了"其他"按钮,但是文本依然会改变。

彻底禁用:

cpp 复制代码
//彻底禁用
ui->radioButton_other->setEnabled(false);

click,press,release, toggled 的区别

信号 含义
clicked 一次"点击"(按下+释放)
pressed 鼠标"按下"
released 鼠标"释放"
toggled 按钮状态切换(选中/未选中)
  • clicked:一次"鼠标按下 + 鼠标释放"后触发。
  • pressed:鼠标按下时触发。
  • released:鼠标释放时触发。
  • toggled:当 checked 属性改变时触发。

总的来说,toggled 最适合 QRadioButton


单选框分组

模拟麦当劳点餐

要求:每⼀组内部来控制排他,但是组和组之间不能排他

cpp 复制代码
//模拟麦当劳
//创建组
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);

CheckBox

QCheckBox 表示复选按钮,可以允许选中多个。 和 QCheckBox 最相关的属性也是 checkablechecked,都继承自 QAbstractButton。

QCheckBox 独有的属性:

  • tristate:用来实现"三态复选框"。

例:获取复选按钮的取值

cpp 复制代码
QString ans;
if(ui->checkBox_eat->isChecked())
    ans+=ui->checkBox_eat->text();
if(ui->checkBox_sleep->isChecked())
    ans+=ui->checkBox_sleep->isChecked();
if(ui->checkBox_play->isChecked())
    ans+=ui->checkBox_play->text();
ui->label_5->setText(ans);

Tool Button

QToolButton 的⼤部分功能,和 QPushButton 是⼀致的。


相关推荐
机器视觉知识推荐、就业指导18 分钟前
Qt 和 C++,是不是应该叫 Q++ 了?
开发语言·c++·qt
m0_7482299935 分钟前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
liu****36 分钟前
三.Qt图形界面开发完全指南:从入门到掌握常用控件
开发语言·c++·qt
布茹 ei ai1 小时前
Python屏幕监视器 - 自动检测屏幕变化并点击
开发语言·python
小龙报1 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
黎雁·泠崖1 小时前
Java抽象类与接口:定义+区别+实战应用
java·开发语言
cfqq19891 小时前
Settings,变量保存
开发语言·c#
女王大人万岁2 小时前
Go标准库 io与os库详解
服务器·开发语言·后端·golang
露天赏雪2 小时前
Java 高并发编程实战:从线程池到分布式锁,解决生产环境并发问题
java·开发语言·spring boot·分布式·后端·mysql
CoderCodingNo2 小时前
【GESP】C++五级练习题 luogu-P3353 在你窗外闪耀的星星
开发语言·c++·算法