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 是⼀致的。


相关推荐
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
我的xiaodoujiao1 小时前
Django 基础知识详细图文教程 9-Django 模板引擎 2
开发语言·数据库·后端·django
菜鸟~noob2331 小时前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
江湖人称菠萝包1 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter10-Data Visualization
笔记·qt·qt5
quantdash_cc2 小时前
量化策略为什么需要实时行情数据?从信号产生到交易决策的时间差说起
开发语言·python·数据分析·量化交易·股票数据·quantdash
逆向编程4 小时前
QGIS地图投影(CRS坐标参照系)设置
开发语言
free-elcmacom4 小时前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
程序员阿鹏4 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
haluhalu.4 小时前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python
孙启超4 小时前
【AI开发之Rust】第 12 课:并发模型与同步原语
开发语言·后端·rust