【C++】 Qt-页面布局

news2024/11/25 2:32:44

文章目录

      • 布局组件和布局按钮
      • 练习-用户信息
        • 页面布局
        • 准备工作
          • 设置性别
          • 设置年龄
          • 设置生日
          • 设置邮箱后缀
        • 设置头像
        • 创建文件
        • 写入文件
        • 清空表单信息
        • Buddy(伙伴)关系
        • Tab顺序

布局组件和布局按钮

Qt的UI设计器中提供了丰富的布局管理功能,组件面板里有Layouts(布局)和Spacers(间隔器)两个组件面板。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hgzhcbpb-1688017184188)(C++.assets/image-20230615124229208.png)]

Vertical Layout:垂直方向布局,组件自动在垂直方向上分布。

Horizontal Layout:水平方向布局,组件自动在水平方向上分布。

Grid Layout:网格状布局(栅格布局),网状布局大小改变时,每个网格的大小都改变。

Form Layout:窗体布局,与网格状布局类似,但是只有最右侧一列网格会改变大小。

Horizontal Spacer:一个用于水平分隔的空格。

Vertical Spacer:一个用于垂直分隔的空格。

在窗体上方工具栏中也提供了布局管理按钮,主要用到的还是上面介绍的那些

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RnesywO-1688017184189)(C++.assets/image-20230615124715217.png)]

练习-用户信息

页面布局

我们要做一个下面格式的窗口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDD0J9lR-1688017184190)(C++.assets/image-20230615130706079.png)]

首先我们根据这个窗口排放对应组件,并对各个组件更改对象的名字方便记忆和使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cTZNwhHi-1688017184190)(C++.assets/image-20230615130737773.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-68vk0Bki-1688017184191)(C++.assets/image-20230615130745766.png)]

然后我们选择所有组件进行排布布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DkHlNM1f-1688017184192)(C++.assets/image-20230615130925653.png)]

如果有些位置不好调整我们可以选择打破布局,然后挪动位置后再进行布局直到达到目标布局为止。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tldiXRSn-1688017184192)(C++.assets/image-20230615154703387.png)]

到这样就可以了。

准备工作

将界面上的年龄、性别、生日、邮箱后缀的初始值设定好,此项工作应当在窗口创建之初就应当完成了。再MainWindow的构造函数中setUi之后进行设定。

设置性别
    ui->comboBox_sex->addItem("男");
    ui->comboBox_sex->addItem("女");
设置年龄
    ui->spinBox_age->setValue(1);
设置生日

让生日的默认值为当前时间

    ui->dateEdit_birth->setDate(QDate::currentDate());  
设置邮箱后缀

这里我们选择添加多个文本,首先创建一个QStringList链表,然后将链表传入

并且设置默认显示,如果不设置默认显示则会默认显示第0个元素

    QStringList strList{"qq.com","163.com","sina.com","gmail.com"};
    ui->comboBox_suffix->addItems(strList);
    ui->comboBox_suffix->setCurrentIndex(1);  //设置编辑框上显示的文本,如果不设置,默认显示第一个

设置头像

我们直接右键更新头像,选择转到槽自动生成一个绑定clicked信号的槽函数

然后对这个槽函数进行实现,其中包括获取图片的绝对路径,之后就是想将这张图放到上边的label标签上

需要通过和图的一个绑定变量来实现(就像easyx中的image变量一样),然后设定图片的大小,最后将图片设置到标签上

//更新头像
void MainWindow::on_pushButton_pic_clicked()
{
    QString file = QFileDialog::getOpenFileName(this,  //父窗口
                                 "请选择一张图片",  //标题
                                 "C:/Users/jiaji/Desktop",  //选择的起始路径
                                 "Image (*.png *.bmp *.jpg)");  //文件过滤
    if(!file.isEmpty()){  //如果字符串不为空,则是选择了一张图
        qDebug()<<"file = "<<file;

        QPixmap pix(file);  //和某张图绑定关联
        pix = pix.scaled(230,180,Qt::KeepAspectRatio);  //保持宽高比,设定图片的大小

        ui->label_pic->setPixmap(pix);  //将图片设置到label标签上
    }

}

点击更新头像按钮会跳转到默认起始路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgZ3Y8EC-1688017184193)(C++.assets/image-20230615155434928.png)]

选择一张图即可实现贴图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57blEraO-1688017184193)(C++.assets/image-20230615155445874.png)]

创建文件

在mainwindow的构造函数中创建文件

创建文件分为两大步骤:找到指定路径下的指定文件 打开文件

    //找到指定路径下的指定文件
    QString path = "E:/ab/bb";
    QString file = "userinfo.txt";

    QDir dir(path);  //绑定指定的路径
    if(!dir.exists()){  //如果路径不存在,则创建
        if(!dir.mkpath(path)){  //如果路径创建失败
            QMessageBox::critical(this,"错误","路径创建失败");
            exit(0);  //程序退出
        }
    }

    QString pathfile = QString("%1/%2").arg(path).arg(file);

    //打开文件
    //QFile file(pathfile);
    m_file.setFileName(pathfile);  //绑定文件
    if(!m_file.open(QIODevice::ReadWrite|QIODevice::Text)){  //创建文件 读写文本
        QMessageBox::critical(this,"错误","文件创建失败");
        exit(0);  //程序退出
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7ulDXPT-1688017184193)(C++.assets/image-20230618095437984.png)]

写入文件

将更新按钮转入槽,在槽中实现写入

其中要注意的是在写入之前重新设定文本大小,写入之后及时刷新缓冲区

//获取用户信息写入到文件
void MainWindow::on_pushButton_update_clicked()
{
    m_file.resize(0);  //重新设定大小

    QString userInfo = "%1\n%2\n%3\n%4\n%5\n%6\n%7\n%8\n%9";
    userInfo = userInfo.arg(ui->lineEdit_nick->text())
                        .arg(ui->plainTextEdit_sign->toPlainText())
                        .arg(ui->lineEdit_name->text())
                        .arg(ui->comboBox_sex->currentText())
                        .arg(ui->spinBox_age->value())
                        .arg(ui->dateEdit_birth->text())
                        .arg(ui->lineEdit_tel->text())
                        .arg(ui->lineEdit_email->text()+"@"+ui->comboBox_suffix->currentText())
                        .arg(ui->lineEdit_school->text());

    qDebug()<<userInfo;

    if(!m_file.write(userInfo.toStdString().c_str())){
        QMessageBox::critical(this,"错误","写入文件失败");
    }

    m_file.flush();  //及时刷新缓冲区

}

这样在录入完信息之后点击更新就会将信息写入到文本了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBfdY5ov-1688017184194)(C++.assets/image-20230618102158633.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F4o7b0IE-1688017184194)(C++.assets/image-20230618102208291.png)]

清空表单信息

将清空按钮转入到一个槽

在这个槽函数中实现将所有信息恢复初始化

//清空表单信息
void MainWindow::on_pushButton_clear_clicked()
{
    ui->lineEdit_nick->clear();
    ui->plainTextEdit_sign->clear();
    ui->lineEdit_name->clear();
    ui->comboBox_sex->setCurrentText("男");
    ui->spinBox_age->setValue(1);
    ui->dateEdit_birth->setDate(QDate::currentDate());
    ui->lineEdit_tel->clear();
    ui->lineEdit_email->clear();
    ui->comboBox_suffix->setCurrentIndex(1);
    ui->lineEdit_school->clear();
}

清空前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PipKJedL-1688017184195)(C++.assets/image-20230618103130784.png)]

清空后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3rWgeG4h-1688017184195)(C++.assets/image-20230618103145140.png)]

Buddy(伙伴)关系

伙伴关系是指界面上的一个label和一个组件的关联,在程序运行时,在窗体上按快捷键快速将焦点切换到label的伙伴关系组件上。

再获颁关系工具下,选中label标签拖动到后面的组件上,那么两者就成了伙伴关系,label的buddy属性,显示了关联的伙伴。

label的text属性改为xx(&S),括号为英文,其中&用来指定快捷键,并不会显示到窗口上,指定的快捷键为0,当程序运行后,按下Alt+0即可将光标焦点切换到昵称的伙伴组件上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gqrL5l1I-1688017184195)(C++.assets/image-20230618163022753.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JlHm42vu-1688017184196)(C++.assets/image-20230618162431474.png)]

Tab顺序

tab顺序说的是在窗口上按下tab键,各个控件焦点的顺序。可以按照我们的习惯来指定这些控件焦点顺序,而不是一个乱序的顺序。

注意:没有输入焦点的组件是没有tab顺序的。如果我们想更改顺序,只需要点击上面的数字,自动更改顺序,点击的顺序为自然数顺序。

控件上tab顺序序号有三种颜色:

  1. 绿色:代表已经点击过了,排好顺序了。
  2. 红色:正在指定顺序的数字下标。
  3. 蓝色:还未指定的数字顺序。

也可以选中数字【右键】

【从这里开始】:代表从选中数字之后的顺序开始调整,之前的数字顺序为原来的顺序。

【重新开始】:所有的控件重新从1开始指定。

如果我们想按照数字方向顺序切换,【shift】+【tab】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DypwZ7UW-1688017184196)(C++.assets/image-20230618162956045.png)]

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

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

相关文章

高效简单解决滑动验证码

前言 做爬虫总会遇到各种各样的反爬限制&#xff0c;其中移动验证码是很重要且常见的一环&#xff0c;今天总结下如何高效破解他的方法&#xff0c;例如下图&#xff1a; 解决思路与方法 首先先来分析下&#xff0c;核心问题其实是要怎么样找到目标缺口的位置&#xff0c;一…

Windows服务启动exe无界面终极解决方案

1、前言 我这个方案&#xff08;C#操作&#xff09;是彻底解决【从Windows服务启动程序exe&#xff0c;程序无界面】问题的终极解决方案&#xff0c;终极方案&#xff0c;绝对的终极方案&#xff0c;本来打算收钱的&#xff0c;还是算了&#xff0c;你们也不容易&#xff0c;关…

网络安全(自学笔记)

如果你真的想通过自学的方式入门web安全的话&#xff0c;那建议你看看下面这个学习路线图&#xff0c;具体到每个知识点学多久&#xff0c;怎么学&#xff0c;自学时间共计半年左右&#xff0c;亲测有效&#xff08;文末有惊喜&#xff09;&#xff1a; 1、Web安全相关概念&am…

Redis 性能管理/优化 缓存雪崩/击穿/穿透

---------------------- Redis 性能管理 ---------------------------------------- ----- 查看Redis内存使用 ----- info memoryredis-cli -a abc123 info memory ----- 内存碎片率 ----- used_memory_rss&#xff1a;是Redis向操作系统申请的内存。used_memory&#xff1a;是…

缺失concrt140.dll下载,找不到concrt140.dll的解决方法

我们平时在打开 Adobe 应用程序、Halo、Forza Horizon 5 等时&#xff0c;可能会遇到找不到 concrt140.dll。因此&#xff0c;这不是特定于某个应用程序的问题。如果没有安装正确的 DLL&#xff0c;应用程序将无法正常工作&#xff0c;因为它们的代码依赖于这些库中编写的代码。…

井盖异动监测传感器:井盖的安全守护者

随着城市化进程的不断加速&#xff0c;城市道路、人行道上的井盖扮演着重要的角色。然而&#xff0c;由于各种因素&#xff0c;如车辆冲击、材料老化等&#xff0c;井盖常常会出现异动情况&#xff0c;井盖异动不仅对行车和行人的安全构成威胁&#xff0c;还给城市基础设施的维…

C#扩展——Visual Studio 代码提示/智能提示字体大小更改方法.

声明&#xff1a;本文为个人笔记&#xff0c;用于学习研究使用非商用&#xff0c;内容为个人研究及综合整理所得&#xff0c;若有违规&#xff0c;请联系&#xff0c;违规必改。 C#扩展——Visual Studio 代码提示/智能提示字体大小更改方法. 文章目录 C#扩展——Visual Studio…

【期末总复习】医学影像学(第2版)周翔平

【选择】 1、垂体腺瘤大小范围这么界定的&#xff1f; P66&#xff0c;肿瘤直径<1cm称为垂体微腺瘤&#xff0c;>1cm称为垂体大腺瘤&#xff0c;>4cm成为巨大腺瘤。 2、当一个车祸伤病人&#xff0c;怀疑长骨骨折首选什么检查方法&#xff1f; P387 X线平片 3、…

leetcode957. N 天后的牢房(java-14天周期优化)

N 天后的牢房 leetcode957. N 天后的牢房题目描述解题思路Java 代码演示 算法专题 leetcode957. N 天后的牢房 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/prison-cells-after-n-days 题目描述 监狱中 8 间牢房排成一…

力扣 106. 从中序与后序遍历序列构造二叉树

题目来源&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/ C题解&#xff1a;中序遍历是左中右&#xff0c;后序遍历是左右中&#xff0c;所以拿到两个遍历数组&#xff0c;我们可以从后序遍历获取中间节点…

信号链噪声分析6

目录 概要 整体架构流程 技术名词解释 技术细节 公用时钟源相位噪声的消除 公用电源噪声的消除 小结 概要 提示&#xff1a;这里可以添加技术概要 放大器输出被发送到均衡混频器&#xff08;相位检测器&#xff09;。相位检测器将两 个信号混合&#xff0c;在其输出处产生和积…

Apollo无人驾驶平台中多传感器标定

传感器标定是无人车最基础也是最核心的模块之一。作为软件层提供的第一项服务,标定质量和准确度极大地影响着感知、定位地图、PNC等模块。在 Apollo 开源自动驾驶平台中,我们提供了丰富的多传感器标定服务,如激光雷达、惯导、摄像头、多普勒雷达等多种传感器之间的标定。算法…

pytorch 中 dim 的-1,0,1,2 的意义 详解

对于3维矩阵&#xff0c;dim为-1时 与 dim为2时 的效果是一样的。dim为0时 从0维度&#xff0c; 下图 是三维实例 图的目的是 可以由一个想象的空间。 下面代码 与上图关系不大 >>> ab torch.tensor([[[0,1,2,3],[1,2,3,4]],[[2,3,4,5],[4,5,6,7]],[[5,6,7,8],…

如何解决failed to load steamui.dll这个问题?

当你在玩steam的时候&#xff0c;电脑突然弹出一个failed to load steamui.dll的时候&#xff0c;相信你内心一定是非常的烦躁的&#xff0c;毕竟你的玩游戏体验直接中断了&#xff0c;今天小编就来给大家详细的讲解一下怎么解决failed to load steamui.dll这个问题。 目录 一…

leetcode消失的数字

题目描述 数组 nums 包含从 0 到 n 的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在 O ( n ) O(n) O(n) 时间内完成吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2 leetcode链接&#xff1a;消失的数字 ⭕…

举例说明什么是卷积神经网络

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习模型&#xff0c;主要应用于计算机视觉任务&#xff0c;如图像分类、物体检测等。它通过卷积层、池化层和全连接层等组件来实现对图像的特征提取和分类。 现在我们以一个简单的图像分类任…

【算法题】动态规划中级阶段之跳跃游戏、最大子数组和、解码方法

动态规划中级阶段 前言一、最大子数组和1.1、思路1.2、代码实现 二、跳跃游戏2.1、思路2.2、代码实现 三、解码方法3.1、思路3.2、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优化问题的方法。它是…

计算机组成原理(期末或考研备考)- 存储器(RAM和ROM重点讲解)

存储器分类 主存储器&#xff1a;也称内存&#xff0c;存放正在运行程序和数据&#xff0c;CPU可以直接访问&#xff0c;容量存储较小&#xff0c;价格较贵。辅助存储器&#xff1a;也称外存&#xff08;绝大多数是磁盘&#xff09;&#xff0c;存放电脑的应用程序等&#xff0…

CentOS7使用Nginx部署前后端分离项目

CentOS7使用Nginx部署前后端分离项目 CentOS7安装使用Nginx1.安装1.1下载1.2 检验服务器上是否有nginx1.3 解压安装1.4 验证 2.部署2.1基本知识2.1.1常用命令2.1.2配置文件 2.2 配置效果前端后端 CentOS7安装使用Nginx 本文使用的nginx版本为1.22.1 Nginx发布版本分为主线版本…

Ant-Design 中a-transfer穿梭框 组件的使用

这段代码是一个包含模态框&#xff08;Modal&#xff09;和穿梭框&#xff08;Transfer&#xff09;的Vue组件。下面我会逐行解释代码的含义。 <a-modaltitle"合并":visible"visible"ok"handleOk"cancel"handleCancel"width"1…