【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;      //描边上下左右的宽度5pxborder-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保持一致,否则加载不了!

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

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

相关文章

React@16.x(20)渲染流程-首次渲染

目录 1,渲染的前置知识点1.1,React 元素1.2,React 节点1.3,节点类型1.4,真实DOM 2,首次渲染2.1,根据参数创建节点2.2,不同节点,有不同处理2.3,生成虚拟DOM树2…

course-nlp——2-svd-nmf-topic-modeling

本文参考自https://github.com/fastai/course-nlp。 使用NMF and SVD进行主题建模 问题 主题建模是开始学习 NLP 的一种有趣方式。我们将使用两种流行的矩阵分解技术。考虑最极端的情况——使用两个向量的外积重建矩阵。显然,在大多数情况下,我们无法…

《微服务大揭秘:SpringBoot与SpringCloud的魔法组合》

加入我们的探险队伍,一起深入SpringBoot与SpringCloud构建的微服务世界。以轻松幽默的笔触,带你一步步揭开微服务架构的神秘面纱,从服务发现的智能地图Eureka,到API网关Zuul的城市门卫,每一个环节都充满了惊喜。不仅如…

蒸汽流量积算仪数采上云案例

蒸汽流量积算仪数采上云案例 背景需求 中晟环境项目,蒸汽流量积算仪数据采集上云。传统方案,采用人工抄表方式,人工成本高,记录繁琐,数据记录常常出现记录错乱、模糊的情形。根据现有需求,实现积算仪的数…

6.4分享会

介绍 严格意义上讲,我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系,ECMAScript 简称 ES 它提供了一套语言标准规范,如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECMAScript 大…

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure?

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure? With the rapid advancement of wireless technology, organizations face a critical decision: should they adopt Wi-Fi 6E now or wait for Wi-Fi 7? This decision impacts various aspects of …

短剧市场大爆炸:小米和华为的亿万争夺战,谁能笑到最后?

在数字化媒体的浪潮中,内容消费模式正经历着翻天覆地的变化。短视频的兴起引领了一种全新的娱乐方式,而短剧作为其衍生形式,正逐渐成为各大科技巨头争夺的新战场。 小米和华为,作为中国科技界的两大巨头,也在这一新兴…

揭秘AI 原生应用技术栈

一次性把“AI 原生应用技术栈”说明白 AI热潮持续,厂商努力推动有价值的应用涌现,并打造服务AI原始应用的平台产品。本文精简介绍业界最新的AI原生应用技术栈,让您迅速把握前沿科技脉搏。 整体架构 AI技术栈逻辑图精简呈现,多层…

图形学初识--透视修正

文章目录 前言正文为什么需要透视矫正?1、视图坐标空间--->NDC坐标空间(透视投影)(1)直线:(2)三角形:总结: 2、NDC坐标空间--->屏幕坐标空间&#xff0…

PID控制算法介绍及使用举例

PID 控制算法是一种常用的反馈控制算法,用于控制系统的稳定性和精度。PID 分别代表比例(Proportional)、积分(Integral)和微分(Derivative),通过组合这三个部分来调节控制输出&#…

因子区间[牛客周赛44]

思路分析: 我们可以发现125是因子个数的极限了,所以我们可以用二维数组来维护第几个数有几个因子,然后用前缀和算出来每个区间合法个数,通过一个排列和从num里面选2个 ,c num 2 来计算即可 #include<iostream> #include<cstring> #include<string> #include…

【Linux系统】进程信号

本篇博客整理了进程信号从产生到处理的过程细节&#xff0c;通过不同过程中的系统调用和其背后的原理&#xff0c;旨在让读者更深入地理解操作系统的设计与软硬件管理手段。 目录 一、信号是什么 1.以生活为鉴 2.默认动作与自定义动作 3.信号的分类、保存、产生 二、产生…

ChatGPT-4o抢先体验

速度很快&#xff0c;结果很智能&#xff0c;支持多模态输入输出&#xff0c;感兴趣联系作者

WordPress电脑版+手机版自动识别切换主题插件优化版

下载地址&#xff1a;WordPress电脑版手机版自动识别切换主题插件优化版 插件介绍&#xff1a; 电脑访问自动显示电脑版 手机访问自动显示手机版

电子电器架构 --- 智能座舱技术分类

电子电器架构 — 智能座舱技术分类 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,…

Java基础29(编码算法 哈希算法 MD5 SHA—1 HMac 算法 堆成加密算法)

目录 一、编码算法 1. 常见编码 2. URL编码 3. Base64编码 4. 小结 二、哈希算法 1. 哈希碰撞 2. 常用哈希算法 MD5算法 SHA-1算法 自定义HashTools工具类 3. 哈希算法的用途 校验下载文件 存储用户密码 4. 小结 三、Hmac算法 小结&#xff1a; 四、对称加密…

鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory

内存管理模块管理系统的内存资源&#xff0c;它是操作系统的核心模块之一&#xff0c;主要包括内存的初始化、分配以及释放。 在系统运行过程中&#xff0c;内存管理模块通过对内存的申请/释放来管理用户和OS对内存的使用&#xff0c;使内存的利用率和使用效率达到最优&#x…

【C++小知识】为什么C语言不支持函数重载,而C++支持

为什么C语言不支持函数重载&#xff0c;而C支持 编译链接过程函数名修饰过程总结 在了解C函数重载前&#xff0c;如果对文件的编译与链接不太了解。可以看看我之前的一篇文章&#xff0c;链接: 文件的编译链接 想要清楚为什么C语言不支持函数重载而C支持&#xff0c;有俩个过程…

大模型Prompt-Tuning技术进阶

LLM的Prompt-Tuning主流方法 面向超大规模模型的Prompt-Tuning 近两年来&#xff0c;随之Prompt-Tuning技术的发展&#xff0c;有诸多工作发现&#xff0c;对于超过10亿参数量的模型来说&#xff0c;Prompt-Tuning所带来的增益远远高于标准的Fine-tuning&#xff0c;小样本甚至…

【保姆级讲解Outlook邮箱的使用技巧】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…