【Qt】按钮类控件(二)

news2024/11/16 5:30:45

文章目录

  • 按钮类控件
      • 1、Push Button
          • 代码示例: 带有图标的按钮
          • 代码示例: 带有快捷键的按钮
      • 2、Radio Buttion
          • 代码示例: click, press, release, toggled 的区别
          • 代码示例: 单选框分组(QButtonGroup)
      • 3、 Check Box
          • 代码示例: 获取复选按钮的取值

按钮类控件

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);
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cow Exhibition G的来龙去脉

[USACO03FALL] Cow Exhibition G - 洛谷 曲折经过 爆搜 一开始没什么好的想法&#xff0c;就针对每头奶牛去or不去进行了爆搜。 #include <cstdio> #include <algorithm> using namespace std;#define maxn 405 int iq[maxn], eq[maxn]; int ans; int n;void d…

C++系统编程篇——Linux初识(系统安装、权限管理,权限设置)

(1)linux系统的安装 双系统---不推荐虚拟机centos镜像&#xff08;可以使用&#xff09;云服务器/轻量级云服务器&#xff08;强烈推荐&#xff09; ①云服务器&#xff08;用xshell连接&#xff09; ssh root公网IP 然后输入password ①添加用户&#xff1a; addus…

企业研发必备网络:这些关键特性,你get了吗?

对于以研发为核心的企业&#xff0c;如软件开发、生物制药、智能汽车等&#xff0c;安全、稳定的研发网络可是他们业务发展不可或缺的。那么&#xff0c;这些研发网络究竟有哪些独特之处&#xff0c;又能为企业带来哪些价值呢&#xff1f; 首先&#xff0c;我们知道企业研发常常…

【设计模式】JAVA Design Patterns——Adapter(适配器模式)

&#x1f50d;目的 将一个接口转换成另一个客户所期望的接口。适配器让那些本来因为接口不兼容的类可以合作无间。 &#x1f50d;解释 现实世界例子 考虑有这么一种情况&#xff0c;在你的存储卡中有一些照片&#xff0c;你想将其传到你的电脑中。为了传送数据&#xff0c;你需…

【管理咨询宝藏104】普华永道财务管理与内控培训

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏104】普华永道财务管理与内控培训 【格式】PDF版本 【关键词】普华永道、四大、财务管理 【核心观点】 - 职能转变后&#xff0c;财务在决策支持…

「前端」性能优化问题总结

前言 本文主要介绍一些前端通用的性能优化方案总结&#xff0c;非写代码阶段的性能优化。 分包 React router V6.4 数据路由新特性 <Route path/xx lazy{async()>{const module await import(./xx)const XX module.defaultreturn{element:(<Suspense fallback…

紫光展锐先进技术科普 | 工业互联网遇到5G,1+1>2?

随着工厂自动化的加速普及&#xff0c;如今我们可能经常看到这样的场景&#xff1a;在高温、潮湿、粉尘、腐蚀等恶劣环境作业场景&#xff0c;巡检机器人穿梭其中&#xff0c;工人们不必弯腰去搬沉重又危险的器件&#xff0c;而旁边会有一个个机械臂帮手平稳有序地完成好所有搬…

HTTP客户端手动解析响应体数据

服务端 package mainimport ("easyGo/person""encoding/json""net/http" )func main() {http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {p : &person.Person{Name: "jackie",Age: 30,T: pe…

【JAVA进阶篇教学】第十六篇:Java中AOP使用

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十五篇&#xff1a;Java中AOP使用。 AOP&#xff08;Aspect-Oriented Programming&#xff09;是一种编程范式&#xff0c;它允许开发者在不修改源代码的情况下&#xff0c;对代码进行横切关注点的分离和增强。在 Java…

Linux上安装python指南

公司的linux服务器上只有自带的python2,折腾了一下安装python3,后来在网上搜发现装miniconda会更加方便。 1、 下载miniconda安装包 清华镜像下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 点这里下载 2、 上传Linux安装 #安装在/usr/local/mini…

Spring AI默认gpt版本源码探究

Spring AI默认gpt版本源码探究 调试代码 通过调试&#xff0c;可以看到默认mdel为gpt-3.5-turbo 源码探究 进入OpenAiChatClient类查看具体的代码信息 可以看到如下代码&#xff0c;在有参构造方法中可以看到&#xff0c;model默认使用OpenAiApi.DEFAULT_CHAT_MODELpublic…

离子风机:静电防护的得力助手

在现代工业生产中&#xff0c;静电问题一直是困扰许多企业的难题。尤其是在电子生产线、维修台等敏感区域&#xff0c;静电的存在可能对产品质量造成严重影响&#xff0c;甚至导致设备损坏。为了解决这一问题&#xff0c;离子风机作为静电防护的得力助手&#xff0c;正逐渐受到…

制造企业数据管理:从数据到价值的转化

在数字化浪潮席卷全球的今天&#xff0c;制造企业面临着前所未有的机遇与挑战。如何从海量的数据中提取有价值的信息&#xff0c;将其转化为企业的核心竞争力&#xff0c;成为了每一个制造企业必须面对的问题。而数据管理&#xff0c;正是实现这一转化的关键所在。制造企业数据…

第01章 互联网的概述(发展历史+接入方法+应用)

1.1 本章目标 了解互联网发展的历史熟悉互联网的接入方式了解互联网的典型应用 1.2 互联网发展的历史(产生过程、发展过程) 1.2.1 互联网的起源与发展 1.2.2 互联网在中国的发展 1.3 互联网的接入

【虚拟仿真】Unity3D中实现对大疆无人机遥控器手柄按键响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近项目中需要用到大疆无人机遥控器对程序中无人机进行控制,遥控器是下图这一款: 博主发…

Django创建网站的地基

相关文档 1、为新网站创建一个文件夹&#xff08;这里是&#xff1a;locallibrary&#xff09; D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

网工路由基础——动态路由协议(RIP)

一、动态路由协议的分类 1.按工作区域分类&#xff1a; 动态路由协议按用途分类可以分为内部网关协议&#xff08;IGP&#xff09;和外部网关协议&#xff08;EGP&#xff09;。一个Internet网可以被分成多个域或多个自治系统&#xff0c;各自治系统通过一个核心路由器…

深入学习Linux内核之v4l2应用编程(二)

一&#xff0c;用户空间访问v4l2设备步骤 V4L2&#xff08;Video for Linux 2&#xff09;是Linux中关于视频设备的内核驱动&#xff0c;它使得Linux系统能够支持视频设备&#xff0c;如摄像头。对于Camera V4L2的应用编程&#xff0c;一般遵循以下步骤&#xff1a; 1&#x…

PADS:生成自交叉平面区域

根据板外形铺铜方法&#xff1a; pads根据板外形铺铜_铺铜如何根据板子形状改变-CSDN博客 根据板外形创建平面区域出现问题&#xff1a; 解决方法&#xff1a;去找结构&#xff0c;让他把出图之前把线合并了

上海市虹桥祥源希尔顿酒店屋顶气膜网球馆

上海市虹桥祥源希尔顿酒店屋顶气膜网球馆为高端酒店设施增添了现代化、环保的运动场所。这座网球馆不仅为酒店住客提供了一个全天候、舒适的运动空间&#xff0c;也为虹桥地区的居民带来了全新的健身体验。作为轻空间&#xff08;江苏&#xff09;膜科技有限公司&#xff08;以…