QT6学习第八天 QFrame 类

QT6学习第八天

  • QFrame 类族
    • QLabel 标签部件
    • 按钮部件
    • QLineEdit 行编辑器部件
    • QAbstractSpinBox
    • QAbstractSlider

今天来学一学 QFrame 类。

QFrame 类族

QFrame 类是带有边框的部件的基类。它的子类包括常用的标签部件 QLabel、以及 QLCDNumber、QSplitter、QStackedWidget、QToolBox、QAbstractScrollArea 等。其中 QAbstractScrollArea 类是所有带有滚动区域的部件类的抽象基类。在QT 中凡是带有 Abstract 的类都是抽象基类。抽象基类不能直接使用,但是可以继承该类,来实现自己的类,或使用它提供的子类。QAbstractScrollArea 的子类中包含常用的文本编辑器 QTextEdit 类和各种项目视图类。

带边框部件主要特点就是有个一明显的边框。QFrame 类的一项主要功能就是实现不同边框效果,主要由边框形状和边框阴影组合来形成。 QFrame 类中定义的主要边框形状和阴影如图所示
在这里插入图片描述
在这里插入图片描述
这里说两个参数,lineWidth 是边框边界的线的宽度,midLineWidth 是在边框中额外插入的一条线的宽度,这条线的作用是为了形成3D效果,并且只在 Box、HLine、VLine 表现为凸起或凹陷时有用。

新建 Qt Widget 应用,命名 myframe,选择 QWidgets 为基类,类名 MyWidget。完成后打开 mywidget.ui 文件,在设计模式从部件列表里拖入一个 Frame 到界面上,然后在右下方的属性编辑器中更改其 frameShape 为 Box,frameShadow 为 Sunken,lineWidth 为 5,midLineWidth 为 10。这些设置你也可以在 mywidget.cpp 文件中的 MyWidget 构造函数里使用如下代码来设置。

ui -> frame -> setFrameShape(QFrame::Box);
ui -> frame -> setFrameShadow(QFrame::Sunken);
ui -> frame -> setLineWidth(5);
ui -> frame -> setMidLineWidth(10);

QFrame 的子类都继承了 QFrame 的边框设置功能。
在Qt标准部件中,能在设计模式中属性栏中设置的参数,其类中一定有对应的函数,可以用代码实现。

QLabel 标签部件

QLabel 是标签部件,用来显示文本或者图片。
拖入一个 Label,属性编辑器中设置宽为 170,高为 30。修改 font 属性中的字体设置。
font 设置对应的代码为

QFont font;
font.setFamily("华文行楷");
font.setPointSize(10);
font.setBold(true);				//加粗
font.setItalic(true);			//斜体
ui -> label -> setFont(font);

QLabel 中的 wordWarp 属性可以实现文本的自动换行。如果不想自动换行,而是在后面自动省略,那么可以使用 QFontMetrics 类,该类用来计算给定字体的字符或字符串的大小,其中包含了多个使用函数。要使用 QFontMetrics,则可以通过创建对象的方式,或通过 QWidget::fontMetrics() 来返回当前部件字体的 QFontMetrics 对象。下面继续在构造函数中添加代码:

QString string = tr("标题太长,需要省略!");
//elidedText() 文本省略,参数一:指定要省略的文本,参数二:省略方式,参数三:文本长度
QString str = ui -> label -> 
fontMetrics().elidedText(string,Qt::ElideRight,150);
ui -> label -> setText(str);

QLabel 属性栏中的 scaledContents 属性可以用于缩放标签中的内容,比如在标签中放一张较大的图片,可以选中该属性来显示整个图片。
如果在标签中使用图片。先在 mywidget.cpp 中添加头文件 QPixmap头文件和构造函数中添加代码:
如果在标签中显示GIF动态图,添加 QMoive头文件和构造函数中添加代码。

//显示图片
ui -> label -> setPixmap(QPixmap("../logo.png"));
//显示GIF动态图
QMovie *movie = new QMovie("../donghua.gif");
ui -> label -> setMovie(movie);
ui -> label -> resize(550,150);
movie -> start();

按钮部件

QAbstractButton 类是按钮部件的抽象基类,提供了按钮的通用功能。他的子类包括复选框 QCheckBox、标准按钮 QPushButton、单选按钮 QRadioButton、工具按钮 QToolButton。
演示一个 QPushButton 的用法,其他部件用法相似。
新建 Qt Widgets 项目,命名 mybutton,基类选择 QWidget,类名设为 MyWidget。完成后在项目中新建 images 文件夹,里面放几张图片。

QPushButton 提供一个标准按钮。在项目中打开 mywidget.ui 文件,拖入三个 Push Button 到界面上,然后在属性编辑器中将它们的 objectName 依次更改为 pushBtn1、pushBtn2、pushBtn3.然后选中 pushBtn1的 checkable 属性,使它拥有“选中”和“未选中”两种状态。再选中 pushBtn2 的 flat 属性,可以不显示该按钮的边框。

按钮最常见的应用就是通过单击或双击来实现一些功能,在Qt中,这种应用是通过信号和槽的机制来实现的。一个例子演示一下信号和槽关联的一种方法。

右击 pushBtn1 按钮,选择“转到槽”,在弹出的“转到槽 - Qt Creator”对话框中选择 toggled(bool)信号
在这里插入图片描述
选择 toggled 后会自动切换到编辑模式并添加该信号对应的槽函数 On_pushBtn1_toggled(boolchecked),添加一些代码:

void Widget::on_pushBtn1_toggled(bool checked)
{qDebug() << tr("按钮是否按下:") << checked;
}

当 pushBtn1 处于按下状态时,checked 为 true,否则为 false。==使用 qDebug() 可以在 “应用程序输出” 窗口输出信息。==你可以运行一下看看。

在 MyWidget 类的构造函数中添加代码,看一下如何使用代码进行设置。需要在头文件中添加 QMenu 库文件。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//为三个按钮添加了文本显示//这里的 & 字符,如果你想让一个按键成为快捷键,就可以在这个按键前加上 &//举个例子,设置 H 键为快捷键,就在 setText 中写上 &H,不区分大小写//如果要显示 & 字符,就用 &&ui->pushBtn1->setText(tr("&nihao"));    //快捷键是 nui->pushBtn2->setText(tr("帮助(&H)"));    //快捷键是 H//setIcon() 添加图标函数,根据路径创建一个 QIcon 对象来设置成图标//Qt的路径是以 exe 文件所在路径为根目录的,需要知道。ui->pushBtn2->setIcon(QIcon("../../images/robot0.png"));ui->pushBtn3->setText(tr("z&oom"));     //快捷键是 z//QMenu 下拉菜单部件QMenu *menu = new QMenu(this);menu->addAction(QIcon("../../images/robot1.png"),tr("放大"));ui->pushBtn3->setMenu(menu);
}

QLineEdit 行编辑器部件

QLineEdit 是一个单行的文本编辑器,允许用户输入和编辑单行的纯文本内容,而且提供了一些列有用的功能,包括撤销与恢复、剪切、复制、拖放等功能。其中,剪切、复制等是行编辑器自带的,不用编码即可实现。关于该部件,读者还可以查看 Qt 的示例程序 Line Edits。

新建一个 Qt Widgets 项目,命名 mylineedit,基类选择 QWidget,类名设为 MyWidget。在 ui 界面中拖入四个 label 和 Line Edit,将各个 Line Edit 依次更改其 objectName 为 lineEdit1、lineEdit2、lineEdit3、lineEdit4.
在这里插入图片描述

  • 显示模式
    QLineEdit 有 4 种显示模式(echo Model),可以在 echoMode 属性中更改它们。四种模式分别是:Normal,正常显示输入的信息;NoEcho,不显示任何输入,可以不泄露字符位数;Password,显示为密码样式(…或***);PasswordEchoOnEdit,编辑时显示正常字符,其他情况下显示为密码样式。

    我们现在将 lineEdit1 设置成 Password 模式。

  • 输入掩码
    QLineEdit 提供了输入掩码(InputMask)来限制输入的内容。可以使用一些特殊的字符来设置输入的格式和内容。(类似正则表达式)这些字符中,有的起限制作用且必须要输入一个字符,有的只起限制作用可以不输入字符或空格代替,看一下这些特殊字符的含义。
    在这里插入图片描述
    我们将 lineEdit2 设置为 >AA-90-bb-!aa#H;* 解释一下含义。
    含义:>”号表明后面输入的字母自动转为大写;​“AA”表明开始必须输入两个字母,因为有前面的“>”号的作用,所以输入的这两个字母会自动变为大写;​“-”号为分隔符,直接显示,该位不可输入;​“9”表示必须输入一个数字;​“0”表示输入一个数字,或者留空;​“bb”表示这两位可以留空,或者输入两个二进制字符,即0或1;​“!”表明停止大小写转换,就是在最开始的“>”号不再起作用;​“aa”表示可以留空,或者输入两个字母;​“#”表示将“#”号作为分隔符,因为“#”号在这里有特殊含义,所以前面要加上“\”号;​“H”表明必须输入一个十六进制的字符;​“;”表示用“”号来填充空格。另外,也可以使用setInputMask()函数在代码中设置输入掩码。

    右击 lineEdit2 选择转到槽中的 returnPressed() ,然后改代码。

void Widget::on_lineEdit2_returnPressed()
{//让 lineEdit2 获得焦点ui->lineEdit2->setFocus();//输出 lineEdit2 的内容qDebug() << ui->lineEdit2->text();//输出 lineEdit2 的显示内容qDebug() << ui->lineEdit2->displayText();
}

这里先让下一个行编辑器获得焦点,然后输出lineEdit2的内容和显示出来的内容,它们有时是不一样的,编程时更多的是使用text()函数来获取它的内容。这时运行程序在lineEdit2中进行输入,完成后按下回车键,可以查看一下输出的内容。注意,如果没有输入完那些必须要输入的字符,按下回车键是不起作用的。

  • 输入验证
    在 QLineEdit 中还可以使用验证器来对输入进行约束。在 mywidget.cpp 文件的构造函数中添加代码。
// 新建验证器,指定范围为100~999
QValidator *validator = new QIntValidator(100, 999, this);
// 在行编辑器中使用验证器
ui->lineEdit3->setValidator(validator);//若要使用正则表达式,需要添加 QRegularExpressionVilidator 库文件
QRegularExpression rx("-?\\d{1,3}");
QValidator *validator = new QRegularExpressionValidator(rx,this);

在代码中为lineEdit3添加了验证器,那么它现在只能输入数字100~999。可以再进入lineEdit3的回车键按下信号的槽,输出lineEdit3的内容。然后运行程序会发现,其他的字符无法输入,而输入小于100的数字时,按下回车键也是没有效果的。

  • 自动补全
    QLineEdit 提供了自动补全功能,利用 QCompleter 类实现。
    在 MyWidget 类构造函数添加代码:
    需添加 QCompleter 头文件
QStringList wordList;
wordList << "Qt" << "Qt Creator" << tr("你好");
// 新建自动完成器
QCompleter *completer = new QCompleter(wordList, this);  
// 设置大小写不敏感
completer->setCaseSensitivity(Qt::CaseInsensitive);      
ui->lineEdit4->setCompleter(completer);

运行程序,在最后一个行编辑器中输入“Q”​,就会自动出现“Qt”和“QtCreator”两个选项。

QAbstractSpinBox

QAbstractSpinBox 类时一个抽象基类,提供了一个数值设定框和一个行编辑器来显示设定值。它有三个子类,QDateTimeEdit、QSpinBox、QDoubleSpinBox,分别用来完成日期时间、整数和浮点数的设定。

创建一个Qt Widget 项目,命名myspinbox,基类为 QWidget,类名MyWidget

QDateTimeEdit类提供了一个可以编辑日期和时间的部件。进入设计模式,从部件列表窗口中分别拖入Time Edit、Date Edit和Date/Time Edit到界面上,然后在属性编辑器中,设置timeEdit的displayFormat为“h:mm:ssA”​,这样可以使用12小时制来进行显示。对于dateEdit,选中它的calendarPopup属性,这样就可以使用弹出的日历部件来设置日期。然后在MyWidget类的构造函数中添加代码:

// 设置时间为现在的系统时间
ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());
// 设置时间的显示格式
//y表示年;M表示月;d表示日;ddd表示星期;H表示小时,使用24小时制显示,
//而h也表示小时,如果最后有AM或者PM的,则是12小时制显示,
//否则使用24小时制;m表示分;s表示秒;还有一个z可以用来表示毫秒。
ui->dateTimeEdit->setDisplayFormat(tr("yyyy年MM月dd日ddd HH时mm分ss秒"));

现在可以运行程序查看效果。另外,可以使用该部件的text()函数获取设置的值,它返回QString类型的字符串;也可以使用 dateTime() 函数,它返回的是 QDateTime 类型数据。

QAbstractSlider

QAbstractSlider类用于提供区间内的一个整数值,它有一个滑块,可以定位到一个整数区间的任意值。该类是一个抽象基类,它有3个子类QScrollBar、QSlider和QDial.

其中滚动条 QScrollBar 一般是用在 QScrollArea 类中实现滚动区域;QSlider就是常见的音量控制或多媒体播放进度等滑块部件;QDial是一个刻度表盘部件。这些部件的使用可以参考Sliders示例程序。

新建Qt Widget 项目,命名myslider,基类选 QWidget,类名 MyWidget。
从部件栏拖拽 Dial、Horizontal Scroll Bar、Vetrical Scroll Bar、Horizontal Slider、Vertical Slider 等部件到界面。
在属性编辑器编辑查看各个部件的属性。

先看 Scroll Bar 的属性:
maximum 设置最大值;minimum:设置最小值;
singleStep:每步的步长,默认:1;pageStep:每页的步长,默认:10;
value 和 sliderPosition:当前值;
tracking:设置是否跟踪,默认:是,拖动滑块时,每移动一个刻度,都会发射valueChanged()信号;
orientation:设置部件方向,有水平和垂直可选;
invertedAppearance:滑块位置,默认最左边;
inertedControls:反向控制;
为了使部件可以获得焦点,读者需要将focusPolicy设置为StrongFocus。

再来看两个Slider,它们有了自己的两个属性:
tickPosition 和 tickInterval,前者用来设置显示刻度的位置,默认是不显示刻度;后者是设置刻度的间隔。

Dial 有自己的属性 wrapping,用来设置是否首尾相连,默认开始与结束是分开的;
属性 notchTarget 用来设置刻度之间的间隔;
属性 notchesVisible 用来设置是否显示刻度。

在 ui 上拖入一个 Spin Box,按下 F4 或点击图标进入信号和槽编辑模式,将刻度表盘部件 dial 的 slideMoved(int) 信号分别与其他各个部件的 setValue(int)槽连接。
在这里插入图片描述
设置完成后运行程序,然后使用鼠标拖动刻度盘部件的滑块,可以看到其他所有的部件都跟着变化了。

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

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

相关文章

【2024 re:Invent现场session参加报告】打造生成式AI驱动的车间智能助手

前言 这次参加了 re:Invent 2024 的 Builders Session 「Building a generative AI–powered shop floor assistant」&#xff0c;在这里和大家分享一下内容&#xff01; Session 概要 Learn how to build a generative AI assistant to analyze data from industrial IoT se…

【C++】数组

1.概述 所谓数组&#xff0c;就是一个集合&#xff0c;该集合里面存放了相同类型的数据元素。 数组特点&#xff1a; &#xff08;1&#xff09;数组中的每个数据元素都是相同的数据类型。 &#xff08;2&#xff09;数组是有连续的内存空间组成的。 2、一维数组 2.1维数组定…

[VUE]框架网页开发02-如何打包Vue.js框架网页并在服务器中通过Tomcat启动

在现代Web开发中&#xff0c;Vue.js已经成为前端开发的热门选择之一。然而&#xff0c;将Vue.js项目打包并部署到生产环境可能会让一些开发者感到困惑。本文将详细介绍如何将Vue.js项目打包&#xff0c;并通过Tomcat服务器启动运行。 1. 准备工作 确保你的项目能够正常运行,项…

ESP32-S3模组上跑通ES8388(13)

接前一篇文章&#xff1a;ESP32-S3模组上跑通ES8388&#xff08;12&#xff09; 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第6段代码&#xff0c;本回继续往下解析。为了便于理解和回顾&#xff0c;再次贴出es8388_init函数源码&#xff0c;在…

openEuler 22.03 使用cephadm安装部署ceph集群

目录 目的步骤规格步骤ceph部署前准备工作安装部署ceph集群ceph集群添加node与osdceph集群一些操作组件服务操作集群进程操作 目的 使用ceph官网的cephadm无法正常安装&#xff0c;会报错ERROR: Distro openeuler version 22.03 not supported 在openEuler上实现以cephadm安装部…

DevOps工程技术价值流:GitLab源码管理与提交流水线实践

在当今快速迭代的软件开发环境中&#xff0c;DevOps&#xff08;开发运维一体化&#xff09;已经成为提升软件交付效率和质量的关键。而GitLab&#xff0c;作为一个全面的开源DevOps平台&#xff0c;不仅提供了强大的版本控制功能&#xff0c;还集成了持续集成/持续交付(CI/CD)…

Spring 邮件发送

Spring 邮件发送 1. 主要内容&#xff08;了解&#xff09; 2. JavaMail 概述&#xff08;了解&#xff09; JavaMail&#xff0c;顾名思义&#xff0c;提供给开发者处理电⼦邮件相关的编程接⼝。JavaMail 是由 Sun 定义的⼀套收发电⼦邮件的 API&#xff0c;它可以⽅便地执⾏⼀…

VSCode如何关闭Vite项目本地自启动

某些情况下VSCode打开Vite项目不需要自动启动&#xff0c;那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可

一种多功能调试工具设计方案开源

一种多功能调试工具设计方案开源 设计初衷设计方案具体实现HUB芯片采用沁恒微CH339W。TF卡功能网口功能SPI功能IIC功能JTAG功能下行USB接口 安路FPGA烧录器功能Xilinx FPGA烧录器功能Jlink OB功能串口功能RS232串口RS485和RS422串口自适应接口 CAN功能烧录器功能 目前进度后续计…

Spark和MapReduce场景应用和区别

文章目录 Spark和MapReduce场景应用和区别一、引言二、MapReduce和Spark的应用场景1. MapReduce的应用场景2. Spark的应用场景 三、MapReduce和Spark的区别1. 内存使用和性能2. 编程模型和易用性3. 实时计算支持 四、使用示例1. MapReduce代码示例2. Spark代码示例 五、总结 Sp…

Python办公——openpyxl处理Excel每个sheet每行 修改为软雅黑9号剧中+边框线

目录 专栏导读背景1、库的介绍①&#xff1a;openpyxl 2、库的安装3、核心代码4、完整代码5、最快的方法(50万行44秒)——表头其余单元格都修改样式总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍…

【C#】书籍信息的添加、修改、查询、删除

文章目录 一、简介二、程序功能2.1 Book类属性&#xff1a;方法&#xff1a; 2.2 Program 类 三、方法&#xff1a;四、用户界面流程&#xff1a;五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序&#xff0c;用于管理书籍信息。这个程序将允许用户添加、编辑、查看…

01-树莓派基本配置-基础配置配置

树莓派基本配置 文章目录 树莓派基本配置前言硬件准备树莓派刷机串口方式登录树莓派接入网络ssh方式登录树莓派更换国内源xrdp界面登录树莓派远程文件传输FileZilla 前言 树莓派是一款功能强大且价格实惠的小型计算机&#xff0c;非常适合作为学习编程、物联网项目、家庭自动化…

无人机探测:光电侦测技术详解

一、基本原理 光电识别技术是无人机追踪设备的核心&#xff0c;其原理主要基于光电转换和信号处理技术。光电识别设备通过光学系统收集目标的光学信息&#xff0c;如可见光、红外光等&#xff0c;并将其转换为电信号。这些电信号随后被处理和分析&#xff0c;以实现对目标的识…

106.【C语言】数据结构之二叉树的三种递归遍历方式

目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…

go并发设计模式runner模式

go并发设计模式runner模式 真正运行的程序不可能是单线程运行的&#xff0c;go语言中最值得骄傲的就是CSP模型了&#xff0c;可以说go语言是CSP模型的实现。 假设现在有一个程序需要实现&#xff0c;这个程序有以下要求&#xff1a; 程序可以在分配的时间内完成工作&#xff0…

03-13、SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel

SpringCloud Alibaba第十三章&#xff0c;升级篇&#xff0c;服务降级、熔断和限流Sentinel 一、Sentinel概述 1、Sentinel是什么 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保…

【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)

打开 xshell ssh 登录远程服务器&#xff1a;卡在下面这里&#xff0c;迟迟不继续 当 SSH 连接卡在 Connection established. 之后&#xff0c;但没有显示远程终端提示符时&#xff0c;这通常意味着连接已经成功建立&#xff0c;说明不是网络连接和服务器连接问题&#xff0c;…

图片预处理技术介绍4——降噪

图片预处理 大家好&#xff0c;我是阿赵。   这一篇将两种基础的降噪算法。   之前介绍过均值模糊和高斯模糊。如果从降噪的角度来说&#xff0c;模糊算法也算是降噪的一类&#xff0c;所以之前介绍的两种模糊可以称呼为均值降噪和高斯降噪。不过模糊算法对原来的图像特征的…

Linux 网络编程之TCP套接字

前言 上一期我们对UDP套接字进行了介绍并实现了简单的UDP网络程序&#xff0c;本期我们来介绍TCP套接字&#xff0c;以及实现简单的TCP网络程序&#xff01; &#x1f389;目录 前言 1、TCP 套接字API详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 connect 2、…