Qt 5.14.2 学习记录 —— 구 Buttons 常用控件

news/2025/1/12 16:56:56/

文章目录

  • 1、QPushButton
    • 快捷键
  • 2、QRadioButton
    • 1、带bool参数的槽函数和其它槽函数
    • 2、点餐小程序
  • 3、QCheckBox


1、QPushButton

QPushButton继承自QAbstractButton类,这是一个抽象类,是其它按钮的父类。抽象类包含纯虚函数,无法创建实例,只能创建子类,子类重写纯虚函数。

在这里插入图片描述

写一个图标放在按钮上:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QIcon icon(":/yd.png");ui->pushButton->setIcon(icon);ui->pushButton->setIconSize(QSize(70, 70));
}

快捷键

找四个箭头图片当作快捷键,分别控制上下左右。

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton_target->setIcon(QIcon(":/img/ztk.jpg"));ui->pushButton_target->setIconSize(QSize(70, 70));ui->pushButton_up->setIcon(QIcon(":/img/up.png"));ui->pushButton_up->setIconSize(QSize(40, 40));ui->pushButton_down->setIcon(QIcon(":/img/down.png"));ui->pushButton_down->setIconSize(QSize(40, 40));ui->pushButton_left->setIcon(QIcon(":/img/left.png"));ui->pushButton_left->setIconSize(QSize(40, 40));ui->pushButton_right->setIcon(QIcon(":/img/right.png"));ui->pushButton_right->setIconSize(QSize(40, 40));
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_up_clicked()
{QRect rect = ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x(), rect.y() - 2, rect.width(), rect.height());
}void Widget::on_pushButton_left_clicked()
{QRect rect = ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x() - 2, rect.y(), rect.width(), rect.height());
}void Widget::on_pushButton_right_clicked()
{QRect rect = ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x() + 2, rect.y(), rect.width(), rect.height());
}void Widget::on_pushButton_down_clicked()
{QRect rect = ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x(), rect.y() + 2, rect.width(), rect.height());
}

现在是点击移动,设置快捷键:

// 在最后添加快捷键, 但点击信号的槽函数保留, 这样点击和快捷键都可用Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton_target->setIcon(QIcon(":/img/ztk.jpg"));ui->pushButton_target->setIconSize(QSize(70, 70));ui->pushButton_up->setIcon(QIcon(":/img/up.png"));ui->pushButton_up->setIconSize(QSize(40, 40));ui->pushButton_down->setIcon(QIcon(":/img/down.png"));ui->pushButton_down->setIconSize(QSize(40, 40));ui->pushButton_left->setIcon(QIcon(":/img/left.png"));ui->pushButton_left->setIconSize(QSize(40, 40));ui->pushButton_right->setIcon(QIcon(":/img/right.png"));ui->pushButton_right->setIconSize(QSize(40, 40));ui->pushButton_up->setShortcut(QKeySequence("w"));ui->pushButton_down->setShortcut(QKeySequence("s"));ui->pushButton_left->setShortcut(QKeySequence("a"));ui->pushButton_right->setShortcut(QKeySequence("d"));
}

另一种更准确的方法是用Qt给出的键位来设置,设置成方向键。写到Key_时会出现下拉框,里面有所有可用的键位。

    ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_Up));ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_Down));ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_Left));ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_Right));

如果两个都写,那就执行最新代码的,也就是方向键控制,而不是wasd:

    ui->pushButton_up->setShortcut(QKeySequence("w"));ui->pushButton_down->setShortcut(QKeySequence("s"));ui->pushButton_left->setShortcut(QKeySequence("a"));ui->pushButton_right->setShortcut(QKeySequence("d"));ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_Up));ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_Down));ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_Left));ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_Right));

连发:

    ui->pushButton_up->setAutoRepeat(true);ui->pushButton_down->setAutoRepeat(true);ui->pushButton_left->setAutoRepeat(true);ui->pushButton_right->setAutoRepeat(true);

2、QRadioButton

单选按钮

在这里插入图片描述

排他意思是只能选一个。做一个简单界面,上面为label,下面三个为radiobutton。

在这里插入图片描述

void Widget::on_radioButton_male_clicked()
{ui->label->setText("您选择的性别为: 男");
}void Widget::on_radioButton_female_clicked()
{ui->label->setText("您选择的性别为: 女");
}void Widget::on_radioButton_others_clicked()
{ui->label->setText("您选择的性别为: 其他");
}

设置一个默认显示

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->radioButton_others->setChecked(true);ui->label->setText("您选择的性别为: 其他");
}

让一个按钮

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->radioButton_others->setChecked(true);ui->label->setText("您选择的性别为: 其他");// Checkable让按钮不能被点击, 但是仍可以响应事件ui->radioButton_others->setCheckable(false);// Enabled则可以彻底绝除ui->radioButton_others->setDisabled(true);// orui->radioButton_others->setEnabled(false);
}

彻底禁止后,按钮就变成灰色了。

1、带bool参数的槽函数和其它槽函数

在这里插入图片描述

void Widget::on_radioButton_1_clicked(bool checked)
{// checked表示了当前radioButton的选中状态qDebug() << "clicked: " << checked;
}void Widget::on_radioButton_2_pressed()
{qDebug() << "pressed";
}void Widget::on_radioButton_3_released()
{qDebug() << "released";
}void Widget::on_radioButton_4_toggled(bool checked)
{// 表示切换// checked状态发生变化, 就触发这个信号qDebug() << "toggled: " << checked;
}

pressed表示鼠标一按下就触发,released表示鼠标按下并抬起后触发。

点击4按钮时会打印toggle: true,一直点击不会继续有反应,但是如果点击一下其它按钮,就会打印toggle: false。

2、点餐小程序

在这里插入图片描述

需要去掉排他属性,用QButtonGroup来对单选按钮进行分组

#include <QButtonGroup>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);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、QCheckBox

复选按钮,可以选多个。

在这里插入图片描述

void Widget::on_pushButton_clicked()
{QString res = "今日安排: ";if(ui->checkBox_study->isChecked())res += ui->checkBox_study->text() + " ";if(ui->checkBox_game->isChecked())res += ui->checkBox_game->text() + " ";if(ui->checkBox_play->isChecked())res += ui->checkBox_play->text() + " ";ui->label->setText(res);
}

结束。


http://www.ppmy.cn/news/1562555.html

相关文章

Chatper 4: mplementing a GPT model from Scratch To Generate Text

4 Implementing a GPT model from Scratch To Generate Text 本章节包含 编写一个类似于GPT的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这个模型可以被训练来生成类似人类的文本。Normalizing layer activations to stabilize neural network training在深度神经网…

网络数通之DHCP

DHCP 概念&#xff1a;动态主机配置协议&#xff0c;该协议提供了一种动态分配网络配置参数的机制&#xff0c;并向后兼容BOOTP协议。 DHCP的工作原理&#xff1a; &#xff08;1&#xff09;发现阶段&#xff1a;DHCP客户寻找DHCP服务器的过程。DHCP客户端依广播的形式发送…

Homestyler 和 Tripo AI 如何利用人工智能驱动的 3D 建模改变定制室内设计

让设计梦想照进现实 在Homestyler,我们致力于为每一个梦想设计师提供灵感的源泉,而非挫折。无论是初学者打造第一套公寓,或是专业设计师展示作品集,我们的直观工具都能让您轻松以惊人的3D形式呈现空间。 挑战:实现定制设计的新纪元 我们知道,将个人物品如传家宝椅子、…

js基础---书写位置

js基础—书写位置 内部 直接写在html文件里面&#xff0c;用script标签包住 规范 &#xff1a;script 标签写在上面 代码演示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"…

如何下载备份慧童空间绘本资源?一个下载工具可以导出绘本图片/音频/文案

慧童空间绘本的绘本正常只能在线看&#xff0c;很多老师希望能把绘本下载下来放到本地反复查看&#xff0c;如何实现呢&#xff1f; 本文分享的就是一个可以下载慧童空间绘本资源的工具&#xff0c;只需把要下载的慧童空间绘本的链接放到下面这个工具里&#xff0c;选择好要保…

[读书日志]从零开始学习Chisel 第十一篇:Scala的类型参数化(敏捷硬件开发语言Chisel与数字系统设计)

8.Scala的类型参数化 8.1 var类型的字段 对于可重新赋值的字段&#xff0c;可以执行两个基本操作&#xff0c;获取字段值或设置为一个新值。如果在类中定义了一个var类型的字段&#xff0c;那么编译器会把这个变量限制为private[this]&#xff0c;同时隐式地定义一个名为变量…

Mysql--基础篇--多表查询(JOIN,笛卡尔积)

在MySQL中&#xff0c;多表查询&#xff08;也称为联表查询或JOIN操作&#xff09;是数据库操作中非常常见的需求。通过多表查询&#xff0c;你可以从多个表中获取相关数据&#xff0c;并根据一定的条件将它们组合在一起。MySQL支持多种类型的JOIN操作&#xff0c;每种JOIN都有…

likeshop同城跑腿系统likeshop回收租赁系统likeshop多商户商城安装及小程序对接方法

前言&#xff1a;首先likeshop是一个开发平台&#xff0c;是一个独创的平台就像TP内核平台一样&#xff0c;你可以在这个平台上开发和衍生出很多伟大的产品&#xff0c;以likeshop为例&#xff0c;他们开发出商城系统&#xff0c;团购系统&#xff0c;外卖点餐系统&#xff0c;…