常用界面设计组件 —— 按钮组件、布局组件

    • 2.4 按钮组件
    • 2.5 布局组件

2.4 按钮组件

QPushButton、QRadioButton 、QCheckBox都从 QAbstractButton,拥有一些共同的属性,如下图所 示:

在这里插入图片描述

图标使用setIcon()来设置,文本可以在构造函数或通过 setText()来设置。 可以使用 isChecked() 检查是否被选 中。

  • QPushButton

    QPushButton 是Qt常用的控件之一,提供普通的按 钮功能。 通过信号槽机制接收触发信号并执行对应 动作。

  • QRadioButton

    单选框默认开启自动互斥(autoExclusive)。如果 启用了自动互斥,属于同一个父部件的单选框的行为 就和属于一个互斥按钮组的一样。如果你需要为属于 同一父部件的单选框设置多个互斥按钮组,把它们加 入QButtonGroup中。

  • QCheckBox

    它也是一个可选择的按钮 , 常见用途是在要求用户 选择一个或多个可用选项的情况下。 与单选按钮不 同,默认情况下复选框不是互斥的。 checkBox按钮 可以通过在QButtonGroup对象中添加它们而互斥。 每当选中或清除复选框时,它都会发出信号状态 Changed()。如果要在每次复选框更改状态时触发操 作,请连接到此信号。您可以使用 isChecked() 查询 复选框是否被选中。

    注意:QCheckBox可以有两种状态,也可以有三种 状态(未选中,选中,半选),默认是两种状态。

    在这里插入图片描述

创建基于QMainWindow的工程,如下图所示:

在这里插入图片描述

对应的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_ok_clicked()
{// 构建个人信息字符串QString info = "我是";if (ui->radioButton_man->isChecked()) {info += "男生";} else if (ui->radioButton_woman->isChecked()) {info += "女生";} else {info = "性别保密";}info += ", 我平时喜欢:";// 处理喜好复选框if (ui->checkBox_backeball->checkState()) {info += ui->checkBox_backeball->text();info += ",";}if (ui->checkBox_cartoon->checkState()) {info += ui->checkBox_cartoon->text();info += ",";}if (ui->checkBox_game->checkState()) {info += ui->checkBox_game->text();info += ",";}if (ui->checkBox_reading->checkState()) {info += ui->checkBox_reading->text();info += ",";}if (ui->checkBox_swim->checkState()) {info += ui->checkBox_swim->text();info += ",";}// 替换最后一个逗号为句号int pos = info.lastIndexOf(",");info.replace(pos, 1, ".");// 设置文本浏览器显示个人信息ui->textBrowser->setText(info);
}void MainWindow::on_pushButton_clear_clicked()
{// 清除单选框和复选框的选择状态,并清空文本浏览器ui->radioButton_man->setAutoExclusive(false);ui->radioButton_man->setChecked(false);ui->radioButton_man->setAutoExclusive(true);ui->radioButton_woman->setAutoExclusive(false);ui->radioButton_woman->setChecked(false);ui->radioButton_woman->setAutoExclusive(true);ui->checkBox_backeball->setChecked(false);ui->checkBox_cartoon->setChecked(false);ui->checkBox_game->setChecked(false);ui->checkBox_reading->setChecked(false);ui->checkBox_swim->setChecked(false);ui->textBrowser->clear();
}

2.5 布局组件

Qt 的界面设计使用了布局(Layout)功能。所谓布局, 就是界面上组件的排列方式,使用布局可以使组件有规 则地分布,并且随着窗体大小变化自动地调整大小和相 对位置。

Qt提供了QHBoxLayout类(水平排列布局), QVBoxLayout类(垂直排列布局),QGridLayout类(网格 排列布局)等基本布局管理。它们之间的继承关系如下图 所示。

在这里插入图片描述

在designer软件界面中我们可以看到:
在这里插入图片描述

每个组件的作用如下表所示。

在这里插入图片描述

addWidget()方法用于向布局中加入组件。

addLayout()方法用于向布局中加入子布局 。

LeftLayout = new QGridLayout(); //由于LeftLayout布局管理器不是主布局管理器,所以不用指定父窗口
QGridLayout *mainLayout = new QGridLayout(this); //mainLayout实现主布局,所有要指定父窗口
//QHBoxLayout默认采取的是以自左向右的方式顺序排列插入控件或子布局,也可以通过setDirection()方法设定排列的顺序
TopRightLayout->setDirection(QBoxLayout::RightToLeft);
//QHBoxLayout是水平布局,可以设定水平各个控件之间的间距
TopRightLayout = new QHBoxLayout();
TopRightLayout->setSpacing(20); //设定各个控件之间的间距为20

布局如下窗口:

在这里插入图片描述

代码方式:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QRadioButton>
#include <QPushButton>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();// 初始化标签void initLabel();// 初始化输入框void initLineEdit();// 初始化布局void initLayout();// 初始化按钮void initBtn();protected:// 标签QLabel *nameLabel;QLabel *ageLabel;QLabel *emailLabel;QLabel *numLabel;QLabel *sexLabel;// 输入框QLineEdit *ageLineEdit;QLineEdit *nameLineEdit;QLineEdit *emailLineEdit;QLineEdit *numLineEdit;// 单选按钮QRadioButton *mBtn;QRadioButton *wBtn;QPushButton *okBtn;
};#endif // WIDGET_H
#include "widget.h"
#include <QFormLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent)
{// 构造函数里逐个调用this->initBtn();this->initLabel();this->initLineEdit();this->initLayout();
}Widget::~Widget()
{
}void Widget::initLabel()
{this->nameLabel = new QLabel("姓名:(&N)");this->ageLabel = new QLabel("年龄:(&A)");this->emailLabel = new QLabel("邮箱:(&E)");this->numLabel = new QLabel("电话号码:(&N)");this->sexLabel = new QLabel("性别");
}void Widget::initLineEdit()
{this->nameLineEdit = new QLineEdit;this->ageLineEdit = new QLineEdit;this->emailLineEdit = new QLineEdit;this->numLineEdit = new QLineEdit;
}// 初始化布局
void Widget::initLayout()
{nameLabel->setBuddy(nameLineEdit);ageLabel->setBuddy(ageLineEdit);emailLabel->setBuddy(emailLineEdit);// 创建一个表格类布局QFormLayout *headerLayout = new QFormLayout;headerLayout->addRow(nameLabel, nameLineEdit);headerLayout->addRow(ageLabel, ageLineEdit);headerLayout->addRow(emailLabel, emailLineEdit);headerLayout->addRow(numLabel, numLineEdit);// 创建水平布局类,意思是横线方向的布局QHBoxLayout *sexLayout = new QHBoxLayout;sexLayout->addWidget(sexLabel);sexLayout->addWidget(mBtn);sexLayout->addWidget(wBtn);// 空隙QSpacerItem *vSpacer = new QSpacerItem(30, 30);QSpacerItem *hSpacer = new QSpacerItem(150, 20);// 创建水平布局QHBoxLayout *okLayout = new QHBoxLayout;// 把上面创建的空隙先添加进来okLayout->addItem(hSpacer);// 把按钮添加到布局okLayout->addWidget(okBtn);// 创建一个垂直布局,作为主布局,把之前创建的布局都添加到这个布局中QVBoxLayout *mainLayout = new QVBoxLayout(this);mainLayout->addLayout(headerLayout);mainLayout->addLayout(sexLayout);mainLayout->addItem(vSpacer);mainLayout->addLayout(okLayout);mainLayout->setMargin(50);mainLayout->setSpacing(10);// 把垂直布局设置为当前界面的this->setLayout(mainLayout);
}void Widget::initBtn()
{this->mBtn = new QRadioButton("男");this->wBtn = new QRadioButton("女");this->okBtn = new QPushButton("确定");
}

可视化方式:

第一步:

第二步
在这里插入图片描述

第三步:

在这里插入图片描述

第四步:

在这里插入图片描述

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

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

相关文章

查看并解析当前jdk的垃圾收集器

概述&#xff1a;复习的时候&#xff0c;学看一下。 命令&#xff1a; -XX:PrintCommandLineFlags 打开idea&#xff0c;配置jvm 把上面命令输入jvm options中即可。 举例代码 这个代码的解析&#xff0c;我上篇文章有写&#xff0c;这个跟本文没有任何关系&#xff1a; …

C++--enum--枚举

C/C枚举类型&#xff1a; 不限定作用域的枚举类型 关键字&#xff1a;enum 声明枚举类型&#xff0c;然后可以用枚举类型来定义变量(如同结构体)&#xff1a; enum Color{white,black,yellow}; {注意分号} Color color_type; color_type 变量的值只限于枚举类型Color中的值 枚…

深度学习|RCNNFast-RCNN

1.RCNN 2014年提出R-CNN网络&#xff0c;该网络不再使用暴力穷举的方法&#xff0c;而是使用候选区域方法&#xff08;region proposal method&#xff09;创建目标检测的区域来完成目标检测的任务&#xff0c;R-CNN是以深度神经网络为基础的目标检测的模型 &#xff0c;以R-C…

Hikvision综合安防管理平台files;.css接口存在任意文件读取漏洞 附POC软件

免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. Hikvisi…

设计模式——1_6 代理(Proxy)

诗有可解不可解&#xff0c;若镜花水月勿泥其迹可也 —— 谢榛 文章目录 定义图纸一个例子&#xff1a;图片搜索器图片加载搜索器直接在Image添加组合他们 各种各样的代理远程代理&#xff1a;镜中月&#xff0c;水中花保护代理&#xff1a;对象也该有隐私引用代理&#xff1a;…

Jupyter Notebook安装使用教程

Jupyter Notebook 是一个基于网页的交互式计算环境&#xff0c;允许你创建和共享包含代码、文本说明、图表和可视化结果的文档。它支持多种编程语言&#xff0c;包括 Python、R、Julia 等。其应用场景非常广泛&#xff0c;特别适用于数据科学、机器学习和教育领域。它可以用于数…

vue element MessageBox.prompt this.$prompt组件禁止显示右上角关闭按钮,取消按钮,及点击遮罩层关闭

vue element MessageBox.prompt this.$prompt组件禁止或取消显示右上角关闭按钮&#xff0c;取消按钮&#xff0c;及点击遮罩层关闭 实现效果&#xff1a; 实现代码 MessageBox.prompt(请先完成手机号绑定, 系统提示, {confirmButtonText: 提 交,showClose: false,closeOnClic…

linux之安装配置VM+CentOS7+换源

文章目录 一、centos07安装二、CentOS 07网络配置2.1解决CentOS 07网络名不出现问题此博主的论文可以解决2.2配置&#xff08;命令: 【ip a】也可查看ip地址&#xff09; 三、使用链接工具链接CentOS进行命令控制四、换软件源 一、centos07安装 1、在vmvare中新建虚拟机 2、下…

Linux:动静态库的概念与制作使用

文章目录 动静态库基础认知动静态库基本概念静态库的制作库的概念包的概念 静态库的使用第三方库小结 动态库的制作动态库的使用动态库如何找到内容&#xff1f;小结 本篇要谈论的内容是关于动静态库的问题&#xff0c;具体的逻辑框架是建立在库的制作&#xff0c;库的使用&…

mysql INSERT数据覆盖现有元素(若存在)

INSERT...ON DUPLICATE KEY UPDATE的使用 如果指定了ON DUPLICATE KEY UPDATE&#xff0c;并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值&#xff0c;则会更新ON DUPLICATE KEY UPDATE关键字后面的字段值。 例如&#xff0c;如果列a被定义为UNIQUE&#xff0…

不要为了学习而学习

经常有朋友问我&#xff1a; 老师&#xff0c;从您这里学了很多方法&#xff0c;也一直想要改变自己&#xff0c;但总是没办法坚持下去&#xff0c;怎么办&#xff1f; 这个问题&#xff0c;我也很无奈啊。毕竟我也没办法飞到你身边&#xff0c;手把手把每一步都教给你。&…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界&#xff1f;探索多模态模型种视觉编码器的缺陷。 论文中指出&#xff0c;上面这些VQA问题&#xff0c;人类可以瞬间给出正确的答案&#xff0c;但是多模态给出的结果却是错误的。是哪个环节出了问题呢&#xff1f;视觉编码器的问题&#xff1f;大语言模型出现了幻觉&…

七八分钟快速用k8s部署springboot前后端分离项目

前置依赖 k8s集群&#xff0c;如果没有安装&#xff0c;请先安装 kubectl &#xff0c;客户端部署需要依赖 应用镜像构建 应用镜像构建不用自己去执行&#xff0c;相关镜像已经推送到docker hub 仓库&#xff0c;如果要了解过程和细节&#xff0c;可以看一下&#xff0c;否…

基于springboot+vue的足球青训俱乐部管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

C++逆向分析--虚函数(多态的前置)

先理解一件事&#xff0c;在intel汇编层面来说&#xff0c;直接调用和间接调用的区别。 直接调用语法&#xff1a; call 地址 硬编码为 &#xff1a;e8 间接调用语法: call [ ...] 硬编码为: FF 那么在C语法中&#xff0c;实现多态的前提是父类需要实现多态的成员…

「 网络安全术语解读 」通用攻击模式检举和分类CAPEC详解

引言&#xff1a;在网络安全领域&#xff0c;了解攻击者的行为和策略对于有效防御攻击至关重要。然而&#xff0c;攻击模式的描述和分类方式缺乏统一性和标准化。为了解决这个问题&#xff0c;MITRE公司创建了CAPEC标准&#xff0c;以提供一个共享和统一的攻击模式分类框架。 1…

一文让你彻底搞懂cookie和session产生漏洞的原理

首先让我们来看看登录的一般流程&#xff1a; 输入账号密码提交给后端&#xff1b;后端进行判断账号密码是否一致&#xff0c;这里的逻辑根据每个程序员的想法去写&#xff1b;如果通过2登录成功&#xff0c;跳转登录成功的页面&#xff1b; 如果通过2登录失败&#xff0c;跳转…

Tensorflow2.0笔记 - 范式norm,reduce_min/max/mean,argmax/min, equal,unique

练习norm,reduce_min/max,argmax/min, equal,unique等相关操作。 范数主要有三种&#xff1a; import tensorflow as tf import numpy as nptf.__version__#范数参考&#xff1a;https://blog.csdn.net/HiWangWenBing/article/details/119707541 tensor tf.convert_to_tensor(…

TensorRT英伟达官方示例解析(二)

系列文章目录 TensorRT英伟达官方示例解析&#xff08;一&#xff09; TensorRT英伟达官方示例解析&#xff08;二&#xff09; 文章目录 系列文章目录前言一、03-BuildEngineByTensorRTAPI1.1 建立 Logger&#xff08;日志记录器&#xff09;1.2 Builder 引擎构建器1.3 Netwo…

【GitHub项目推荐--Awesome-Go/Python/JavaScript/Java】【转载】

Awesome 译为令人惊叹的、极好的&#xff0c;GitHub 上有很多 Awesome 开头的开源项目。比如 Awesome-Go、Awesome-Python。 就像汇总常用的软件一样&#xff0c;GitHub上有大量的开源项目&#xff0c;开发者就会根据需要汇总一些常用的好用的资源&#xff0c;并且根据 Awesom…