【QT5】<总览三> QT常用控件

文章目录

前言

一、QWidget---界面

二、QPushButton---按钮

三、QRadioButton---单选按钮

四、QCheckBox---多选、三选按钮

五、margin&padding---边距控制

六、QHBoxLayout---水平布局

七、QVBoxLayout---垂直布局

八、QGridLayout---网格布局

九、QSplitter---分裂器

十、QSpacerItem---隔离弹簧

十一、QLineEdit---用户输入框

十二、QDialog---对话框

十三、QScrollArea---界面滚动

十四、QTabWidget---面板切换

十五、QListWidge---列表界面


前言

承接【QT5】<总览二> QT信号槽、对象树及样式表。若存在版权问题,请联系作者删除!


一、QWidget---界面

1. 介绍:是所有用户界面对象的父类。例如:QLabel、QPushButton等。常用于做顶层窗口或子部件。

2. 使用示例:


二、QPushButton---按钮

1. 作用:按钮,可以检测用户的点击而进行相关操作。当选中checkable属性时,能够作为一种按压式的开关按钮。

2. 四种信号函数:

void clicked(bool checked=false)点击并松手
void pressed()点击按钮
void released()松开按钮
void toggled(bool checked)按压式开关,第一次点击为true,第二次点击为false。使用时需要添加"ui->pushButton->setCheckable(true);"语句

3. 设计一个灵活的按钮:

需求:该按钮有个默认状态的皮肤;当鼠标划过时切换为另一个状态;当鼠标点击时切换为另一个状态;当鼠标点击一次后划过时切换为另一个状态。

步骤一:获取素材并导入QT中:

步骤二:在ui设计器中将pushButton拖拽至界面,并且设置好合适的大小:

步骤三:写qss文件,将四种状态的图片加载:

运行结果:

【注意】若运行QT时加载不出图片,要注意是否修改了原图片的格式!


三、QRadioButton---单选按钮

1. 作用:单选按钮。将一些QRadioButton按钮添加到一个组后,与其他组的按钮就隔离开,同时该组内的QRadioButton按钮只能单选。(多选我们一般用QCheckBox)

2. 案例演示:

【1】需求:设计两组单选按钮,分别选择性别和科目。两组按钮分别选中后右击以添加到独立的两个按钮组,以隔绝开选择。

【2】核心板块:

①ui设计:

②样式表文件:

QLabel {font-size: 30px}

QRadioButton::indicator:checked#radioButton {border-image: url(:/images/check.png);}
QRadioButton::indicator:unchecked#radioButton {border-image: url(:/images/uncheck.png);}
QRadioButton::indicator:checked#radioButton_2 {border-image: url(:/images/check.png);}
QRadioButton::indicator:unchecked#radioButton_2 {border-image: url(:/images/uncheck.png);}

QRadioButton::indicator#radioButton_3 {width: 0px;}
QRadioButton::checked#radioButton_3 {background-color: rgb(107, 173, 87); border-radius: 8px; color: White;}
QRadioButton::unchecked#radioButton_3 {background-color: Yellow; border-radius: 8px;}

QRadioButton::indicator#radioButton_4 {width: 0px;}
QRadioButton::checked#radioButton_4 {background-color: rgb(107, 173, 87); border-radius: 8px; color: White;}
QRadioButton::unchecked#radioButton_4 {background-color: Yellow; border-radius: 8px;}

QRadioButton::indicator#radioButton_5 {width: 0px;}
QRadioButton::checked#radioButton_5 {background-color: rgb(107, 173, 87); border-radius: 8px; color: White;}
QRadioButton::unchecked#radioButton_5 {background-color: Yellow; border-radius: 8px;}

QRadioButton::indicator#radioButton_6 {width: 0px;}
QRadioButton::checked#radioButton_6 {background-color: rgb(107, 173, 87); border-radius: 8px; color: White;}
QRadioButton::unchecked#radioButton_6 {background-color: Yellow; border-radius: 8px;}

【3】运行结果:


四、QCheckBox---多选、三选按钮

1. 作用:多选、三态选择按钮。

2. 三态设定:针对一个选项有选中半选未选中,需要将QCheckBox属性中的trstate勾选,如下图:

3. 多选设定:针对一个组,可以同时选择多个选项,需要将按钮组的exclusive取消勾选,如下图:

4. 常用信号函数:stateChanged(int)。当参数为0时,表示未选;参数为1时,表示半选;参数为2时,表示选中。

5. 三态选择时的样式表:

QCheckBox::indicator:unchecked {...}//未选中
QCheckBox::indicator:indeterminate{...}//半选中
QCheckBox::indicator:checked {...}//选中

五、margin&padding---边距控制

1. 概念:

  • margin:一个控件的边框到另一个控件的边框的距离,属于容器外部距离(外边距)
  • padding:自身边框到自身内部另一个容器边框之间的距离,属于容器内距离(内边距)

2. 常用的样式表:

QPushButton{
	margin: 0px;            //上下左右的外边距
	margin-top: 100px;      //顶部的外边距
	margin-bottom: 50px;    //底部的外边距
	margin-left: 5px;       //左边的外边距
	margin-right: 10px;     //右边的外边距

    border-width: 5px;      //描边上下左右的宽度5px
	border-color: black;    //描边的颜色
	border-style: solid;    //描边风格:solid为实心填充

    padding-top: 100px;     //内边距:距离容器顶部其他部分
	padding-bottom: 100px;  //内边距:距离容器底部其他部分
}

六、QHBoxLayout---水平布局

1. 作用:水平布局,联合控制多个控件的水平布局。

2. 重要属性:

  • layoutSpacing:控制控件间距离
  • layoutStretch:控制控件的拉伸因子
  • sizePolicy:控制大小策略

3. 实例说明:

运行时发现:扩大或缩小界面,这些控件不会跟着变化。要想跟着变化,需要在widget.cpp的构造函数中添加"this->setLayout(ui->horizontalLayout);"。


七、QVBoxLayout---垂直布局

垂直布局:与水平布局QHBoxLayout类似,只是换成了垂直方向。水平布局和垂直布局都可以多层嵌套使用,用于规范界面和保证缩放界面的比例关系。


八、QGridLayout---网格布局

1. 作用:网格布局(栅格布局)

2. 说明:与水平、垂直类似,只是以网格的形式来规范控件。


九、QSplitter---分裂器

1. 作用:分裂器。使一个界面中间的线条左右/上下拖动来控制分界面的大小。

2. 重要属性:

  • orientation:设置水平或垂直方向。
  • opaqueResize:为true时,实时更新子控件大小;为false时,拖动时显示灰色线条,拖动到位并释放鼠标后再显示分割线条。
  • handleWidth:设置分割线的宽度。
  • childrenCollapsible:勾选后用户可以将子部件的大小调整为0.

3. 注意事项:

  • 若不想拖动时将子部件拖至0,不仅需要取消勾选childrenCollapsible,还需要设置子部件的最小宽度/高度。
  • 若想让QSplitter和子控件随着屏幕大小而改变,可以将整个QSplitter塞到水平布局QHBoxLayout,然后在构造函数中设置相关布局。


十、QSpacerItem---隔离弹簧

1. 作用:隔离弹簧。配合布局使用,控制控件之间的距离。

2. 注意事项:

  • 在ui设计器里会有弹簧的样子出现,但实际运行则不会显示。

十一、QLineEdit---用户输入框

1. 作用:用户键盘输入控件。

2. 实例演示:

【1】需求:制作一个仿QQ登录界面。

【2】核心部分展示:

①ui设计器:

②演示表文件:

QPushButton#pushButton {
    border-image: url(:/down.png);
}

QPushButton#pushButton_2 {
    border-image: url(:/right.png);
}

QWidget#Widget {
    background-color: White;
}

QWidget#widget1 {
    background-color: Grey;
}

QWidget#widget1_2 {
    background-color: Grey;
}

QLineEdit {
    border: none;
}

【3】运行展示:


十二、QDialog---对话框

1. 作用:对话框。

2. 创建及使用:

//头文件中声明
QDialog *diaglog;

//源文件中构造器中实例化
dialog = new QDialog(this);

//弹出后不可再点击原先界面
dialog->setModal(true);

//显示对话框
dialog->show();

//设置无边框
dialog->setWindowFlag(Qt::FramelessWindowHint);

//设置透明,可用于上层圆角控件显示
dialog->setAttribute(Qt::WA_TranslucentBackground);

3. 制作支付对话框:

【1】注意:创建项目时以QDialog为父类。

【2】ui设计器:由于QDialog无法通过border-radius来设置圆角边框,因此将QDialog设置为透明并且上层使用QFrame。

【3】主要的控件样式表:

①按钮:两个按钮的样式表类似,只是圆角的位置不同,因此只展示左边按钮的样式表。设置按钮圆角及边缘线宽度和实线类型,设置按压按钮时颜色变为灰色。

QPushButton {
	color: rgb(30, 144, 255);
	border-top: 1px;
	border-right: 1px;
	border-style: solid;
	border-color: Grey;
}

QPushButton:pressed {
	background-color: Grey;
	border-bottom-left-radius: 25px;
}

②QFrame:设置圆角以及背景为白色。

QFrame {
	border-radius: 25px;
	background-color: White;
}

【4】运行结果:由于我们设定了“取消”和“确定”按钮的槽,使其在点击后就会关闭当前对话框。


十三、QScrollArea---界面滚动

1. 作用:界面滚动。

2. 注意事项:

  • 只有当QScrollArea的宽度或高度超出原有界面时,才会出现横向或纵向滚动条。
  • 若不想使用滚动条,可以将下图中的属性设置为“关”。

3. 实例演示:

【1】需求:设计一个能滚动的界面,且只有滚动条,没有上下的按键。

【2】ui设计器:

【3】QScrollArea控件的样式表:①修改了滑块的颜色、宽度;②取消了上下两个按键;③鼠标停留则滑块颜色加深。

QScrollBar:vertical {
     background-color: White;
	 width: 20px;
 }

 QScrollBar::handle:vertical {
    background: rgba(200,200,200,50%);
	border-radius: 10px;
 }

 QScrollBar::handle:vertical:hover {
    background: rgba(200,200,200,90%);
	border-radius: 10px;
 }

 QScrollBar::add-line:vertical {
    width: 0px;
	height: 0px;
 }

 QScrollBar::sub-line:vertical {
    width: 0px;
	height: 0px;
 }

十四、QTabWidget---面板切换

1. 作用:面板切换。

2. 实例演示:

【1】需求:与QListWidget配合,在QListWidget中点击对应项,QTabWidget跳转界面。

【2】ui设计器:

【3】关键控件的样式表:

①QListWidget:设置了背景色、取消了外边框、设置了选中项时的背景和字体颜色。

 QListView {
	background-color: rgba(170,170,170, 50%);
	color: black;
	border: none;
}

QListView::item:selected {
	background-color: White;
	color: black;
}

②QTabWidget:隐藏了默认的标签,取消了外边框。

QTabBar::tab {
	width: 0px;
	height: 0px;
}

QTabWidget{
		border: none;
}

【4】注意问题:运行时默认会有一个蓝色框选中QListWidget的第一个项。要取消这样的选中,需要在属性focusPolicy中选择NoFocus。


十五、QListWidge---列表界面

1. 作用:列表界面。列表中的项可以动态增加、删除等操作。

2. 常用函数:

//假设创建了QListWidget对象listWidget
//新增项
listWidget->addItem("张三");
listWidget->addItem("李四");
listWidget->addItem("王五");

//删除项
listWidget->takeItem(0);

//插入项,在前面插入
listWidget->insertItem(0, "张三");

//槽currentRowChanged(int currentRow)中获取列表项目编号和内容
listWidget->item(currentRow)->text()

3. 仿QQ好友列表制作:

【1】ui设计器:

①qqItem.ui:由三部分组成,左边将两个QLabel放置于QWidget上,用于显示头像和手机图标;右边的QLabel显示网名。

②widget.ui:显示主要的QListWidget界面。

【2】主要技术点:新建qqitem.ui和qqitem.cpp,将qqitem对象放置于QWidget的项当中。

qqitem.cpp中的构造函数:

QQitem::QQitem(QString path, bool isShow, QString name, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QQitem)
{
    ui->setupUi(this);
    //加载头像
    QImage image(path);
    ui->head->setPixmap(QPixmap::fromImage(image.scaled(ui->head->width(), ui->head->height())));
    //加载手机图标
    QImage image2(":/phone.png");
    ui->phone->setPixmap(QPixmap::fromImage(image2.scaled(ui->phone->width(), ui->phone->height())));
    ui->phone->setVisible(isShow);
    //加载名字
    ui->name->setText(name);
}

Widget.cpp中的构造函数:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setLayout(ui->verticalLayout);

    //创建QQItem对象
    QQitem *qq0 = new QQitem(":/wsl.png", true, "小清新");
    QQitem *qq1 = new QQitem(":/hqr.jpg", true, "Emiya Shirou");

    //加入listWidget中
    QListWidgetItem *item0 = new QListWidgetItem;
    QListWidgetItem *item1 = new QListWidgetItem;
    ui->listWidget->addItem(item0);
    ui->listWidget->addItem(item1);
    ui->listWidget->setItemWidget(item0, qq0);
    ui->listWidget->setItemWidget(item1, qq1);
}

【3】注意事项:qqitem.ui中设计其长度时需要注意与QListWidget保持一致,否则加载不了!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Base64前端图片乱码转换

title: Base64码乱转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片,前端能够接收,但是console.log()后发现图片变成了乱码,但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将…

身份证数字识别DBNET

采用DBNET检测身份证数字所在区域,然后使用切割字符的方法,使用PCASVM训练和分类,支持C/PYTHON开发,只需要OPENCV 身份证数字识别DBNETPCASVM

2004NOIP普及组真题 3. FBI树

线上OJ 地址: [04NOIP普及组] FBI树 本题的意思是:给定一个 01字符串 (对应一棵完全二叉树的最后一层叶子节点),将树的每一个节点的值用字母“F、B、I”表示。规则(如下图所示)为: 1…

【AI大模型】Transformers大模型库(三):特殊标记(special tokens)

目录​​​​​​​ 一、引言 二、特殊标记(special tokens) 2.1 概述 2.2 主要功能 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服…

证件照太大了怎么压缩到100k?6个软件教你快速进行压缩

证件照太大了怎么压缩到100k?6个软件教你快速进行压缩 压缩证件照大小通常需要使用专门的图片压缩工具或者图片编辑软件。以下是六款常用的软件,它们可以帮助你快速压缩证件照大小到100KB以内: 1.迅捷压缩:这是一款图片压缩工具…

【javaEE初阶】

🌈🌈🌈关于java ⚡⚡⚡java的由来 我们这篇文章主要是来介绍javaEE,一般称为java企业版,实际上java的历史可以追溯到上个世纪90年代,当时主要的语言主流的还是C语言和C,但是在那个时期嵌入式初…

MySQL之查询性能优化(六)

查询性能优化 查询优化器 9.等值传播 如果两个列的值通过等式关联,那么MySQL能够把其中一个列的WHERE条件传递到另一列上。例如,我们看下面的查询: mysql> SELECT film.film_id FROM film-> INNER JOIN film_actor USING(film_id)-> WHERE f…

K8S==ingress配置自签名证书

安装openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 生成证书 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example.local.key -out example.local.crt -subj "/CNexample.local/Oexample.local"创建K8S secr…

揭秘c语言储存类别

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文将整理c语言的储存类型的知识点 储存类型概念 描述:用于解决内存开辟与解放的时间的问题。跟作用域没啥关系。 但是呢,他也是能影响到程序的运行的,所以是很关键的。 类型: auto :自…

htb_solarlab

端口扫描 80,445 子域名扫描 木有 尝试使用smbclient连接445端口 Documents目录可查看 将Documents底下的文件下载到本地看看 xlsx文件里有一大串用户信息,包括username和password 先弄下来 不知道在哪登录,也没有子域名,于是返回进行全端…

flyfish3.0.0配置避坑

1.基础环境准备篇 doc/01-基础环境准备篇.md 云智慧/FlyFish - Gitee.com 使用教程里给出的java环境时,可以显示java版本,但是不能显示Maven的版本 改为: export NODE_HOME/usr/local/node/node-v14.19.3-linux-x64 export PATH$NODE_HOME…

C语言—字符函数和字符串函数

1.字符分类函数 C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。 这些函数的使用都需要包含一个头文件 ctype.h。 例:将一句话中的小写字母改成大写字母。 2.字符转换函数 头文件:ctype.h C语言提供了2…

不是,有了这套IP地址管理开源系统谁还用Excel啊

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 中午好,我的网工朋友。 作为网工的我们想必都很清楚IP地址管理的重要性以及其复杂性,传统的Excel表格虽然在某些情况下能…

搭建大型分布式服务(三十九)SpringBoot 整合多个kafka数据源-支持Aware模式

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

YOLOv8+PyQt5苹果叶病害检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

效果视频&#xff1a;YOLOv8PyQt5苹果叶病害检测系统完整资源集合 资源包含可视化的苹果叶病害检测系统&#xff0c;基于最新的YOLOv8训练的苹果叶病害检测模型&#xff0c;和基于PyQt5制作的可视苹果叶病害系统&#xff0c;包含登陆页面和检测页面&#xff0c;该系统可自动检…

上位机图像处理和嵌入式模块部署(f407 mcu中的单独上位机烧录方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;stm32有三种烧录方法&#xff0c;一种是st-link v2&#xff0c;一种是dap&#xff0c;一种是j-link。不过我们在实际操作…

电阻、电容和电感测试仪设计

在现代化生产、学习、实验当中,往往需要对某个元器件的具体参数进行测量,在这之中万用表以其简单易用,功耗低等优点被大多数人所选择使用。然而万用表有一定的局限性,比如:不能够测量电感,而且容量稍大的电容也显得无能为力。所以制作一个简单易用的电抗元器件测量仪是很…

17K star,一款开源免费的手机电脑无缝同屏软件

导读&#xff1a;白茶清欢无别事&#xff0c;我在等风也等你。 作为程序员&#xff0c;在我们的工作中经常需要把手机投票到电脑进行调试工作&#xff0c;选择一款功能强大的投屏软件是一件很必要的事情。今天给大家介绍一款开源且免费的投屏软件&#xff0c;极限投屏&#xff…

json和axion结合

目录 java中使用JSON对象 在pom.xml中导入依赖 使用 public static String toJSONString(Object object)把自定义对象变成JSON对象 json和axios综合案例 使用的过滤器 前端代码 响应和请求都是普通字符串 和 请求时普通字符串&#xff0c;响应是json字符串 响应的数据是…

postman教程-14-生成随机数

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了Postman关联接口的调用方法&#xff0c;本小节我们讲解一下Postman生成随机数的方法。 在接口测试中&#xff0c;经常需要向接口发送不同的输入数据&#xff0c;以确保接口的健壮性和可靠性。…