(5)Qt—ui常用类

news2025/1/13 2:42:16

目录

1. QString 字符串类*

2. 容器类

2.1 顺序容器 QList


1. QString 字符串类*

QString是Qt中的字符串类,与C和C++不同的是,Qt的字符串使用Unicode编码。每一个字符使用一个16位的QChar,而不是之前8位的char,所以Qt处理中文没有问题,并且每个中文算作一个字符。

Qt是基于C++的开发框架,因此很多类会尽可能地兼容C++的API,QString支持绝大多数std::string的API,例如append、size、length、at、push_back等。除此之外,也有修改和新增的部分。

对于QString类的API,可以通过认识常用的英文单词查询文档使用。

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    // 支持多国语言
    QString text = "αβγあいうえおАБВ";
    qDebug() << text;
    qDebug() << text.size();    //字符串长度法1
    qDebug() << text.length();  //字符串长度法2
    qDebug() << text.count();   //字符串长度法3

    // int → QString
    // 参数1:要转换的数字
    // 参数2:进制,默认为十进制
    text = QString::number(11,16);
    qDebug() << text;

    // int → QString
    // 参数1:要转换的数字
    // 参数2:进制,默认为十进制
    // 返回值:QString& ,因此支持链式调用
    text.setNum(10,16).append("哈哈哈");
    qDebug() << text;

    // QString → int
//    int	toInt(bool * ok = 0, int base = 10) const
    // 参数1:表示转换是否成功
    // 参数2:进制,默认为十进制
    // 返回值:转换的结果,0表示失败
    text = "0";
    bool result; // 转换是否成功
    int i = text.toInt(&result);
    qDebug() << "是否成功:" << result;
    qDebug() << i;
}

Dialog::~Dialog()
{

}

2. 容器类

C++的STL容器类已经不适用于Qt的环境,因为Qt重新实现了部分容器类,据官方所说,Qt的容器类更加轻巧、安全和易于使用。Qt对这些容器类进行存储优化,可以使生成的exe可执行文件的体积减小,这些容器类是线程安全的,支持同时被多个线程进行只读访问,几乎支持C++的STL容器类的API,并在此基础上进行了扩充。

2.1 顺序容器 QList

先创建一个自定义的C++类,然后使用QList存储这个类的对象。

在Qt中创建一个自定义的C++类的操作步骤如下:

1. 在Qt Creator中选中项目名称,鼠标右键,点击“添加新文件”。

2. 在弹出的窗口中,按照下图所示进行操作。

3. 在弹出的窗口中,先给类命名(主题使用大驼峰命名法,即所有单词的首字母大写),然后点击“下一步”。

4. 在项目管理界面直接点击完成。可以看到在项目中已经有对应的头文件和源文件了。

QList除了支持C++的迭代器以外,还支持Java的迭代器,对应关系如下。

C++迭代器

等效的Java迭代器

QList<T>::const_iterator

QListIterator<T>

QList<T>::iterator

QMutableListIterator<T>

QStringList类基本等同于QList<QString>

 dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
//头文件
#include <QList>
#include "student.h"
#include <QDebug>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
};

#endif // DIALOG_H

student.h

#ifndef STUDENT_H
#define STUDENT_H

//引入头文件
#include <QString>
class Student
{
public:
    Student(QString,int,QString);

    QString getName() const;
    void setName(const QString &value);

    int getAge() const;
    void setAge(int value);

    QString getMajor() const;
    void setMajor(const QString &value);

private:
    QString name;
    int age;
    QString major;
};

#endif // STUDENT_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    //创建一个QList对象
    QList<Student> class23021;
    Student s1("张三",23,"电子信息科学与技术");
    Student s2("李四",25,"自动化");
    Student s3("王五",18,"计算机科学");
    Student s4("赵六",24,"物联网");
    Student s5("徐七",23,"电子信息工程");
    Student s6("孙八",18,"计算机科学");


    //增加元素
    class23021.push_back(s1); //向后追加
    class23021.append(s2);   //向后追加
    class23021.push_front(s3); //向前追加
    class23021 <<s1 <<s2 <<s3;  //连续追加
    class23021.insert(1,s4);  //在第二个位置插入 //参数1:位置 //参数2:元素值

    //删除元素
    class23021.pop_back();  //删除最后一个元素,同removeLast
    class23021.pop_front();  //删除第一个元素,同removeFirst
    //class23021.erase();
    class23021.removeAt(1); //删除第n个元素
    //int removeAll(const T & value)  删除所有相同的元素
    //bool QList::removeOne(const T & value) 删除第一个相同元素

    //更新元素
    class23021[1] = s5;
    //更新元素
    //参数1:元素位置
    //参数2:更新的数组
    class23021.replace(0,s6);

    //遍历
    for(int i = 0;i<class23021.count();i++){
        Student s = class23021.at(i); //更高效
        qDebug()<<s.getName()<<s.getAge()<<s.getMajor();
    }
    qDebug()<<"*********************************";
    //C++ STL迭代器
    for(QList<Student>::const_iterator iter = class23021.begin();iter !=class23021.end();iter++){
        Student s = *iter;
        qDebug()<<s.getName()<<s.getAge()<<s.getMajor();
    }
    qDebug()<<"*********************************";
    //Java迭代器构造函数,参数为容器对象
    QListIterator<Student> iter(class23021);
    while(iter.hasNext()){ //判断后续有无有效元素
        //向后移动并取出
        Student s = iter.next();
        qDebug()<<s.getName()<<s.getAge()<<s.getMajor();
    }
}

Dialog::~Dialog()
{

}

main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return 0;
}

student.cpp

#include "student.h"

Student::Student(QString name,int age,QString major):name(name),age(age)
{
    this->major = major;
}
QString Student::getName() const
{
    return name;
}

void Student::setName(const QString &value)
{
    name = value;
}
int Student::getAge() const
{
    return age;
}

void Student::setAge(int value)
{
    age = value;
}
QString Student::getMajor() const
{
    return major;
}

void Student::setMajor(const QString &value)
{
    major = value;
}



运行结果:

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

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

相关文章

基于ssm医药药品管理系统

开发工具eclipse&#xff0c;jdk1.8 数据库mysql5.7,tomcat8 技术&#xff1a;springmvcspringmybatis(ssm) 主要功能如下&#xff1a; ①登录系统&#xff1a;管理员需要输入正确的用户名和密码来登录系统&#xff0c;从而完成各类信息的管理工作&#xff1b; ②信息查询…

前端007_类别模块_列表功能

1、需求分析 类别模块主要文章类别进行管理,首先实现类别列表功能,包含数据列表、分页、条件查询 。 2、Mock模拟接口数据 请求URL: /article/category/search请求方式: post描述: 文章类别分页条件查询列表mock.js 配置: 带分页功能,每页显示20条{"code": 2…

【网络取证篇】宝塔面板server和panel的目录功能说明

【网络取证篇】宝塔面板server和panel的目录功能说明 宝塔面板的目录结构在不同的情况下可能有所不同—【蘇小沐】 文章目录 【网络取证篇】宝塔面板server和panel的目录功能说明1、宝塔优点&#xff1a; &#xff08;一&#xff09;宝塔面板/www/server主要目录&#xff08;二…

每天一道算法练习题--Day25 第一章 --算法专题 --- ----------蓄水池抽样

蓄水池抽样 问题描述算法描述相关题目总结 力扣中关于蓄水池抽样问题官方标签是 2 道&#xff0c;根据我的做题情况来看&#xff0c;可能有三四道。比重算是比较低的&#xff0c;大家可以根据自己的实际情况选择性掌握。 蓄水池抽样的算法思维很巧妙&#xff0c;代码简单且容易…

TFT屏幕在arduino (esp 32)下的驱动,汉字显示和字库比较

一、TFT屏幕的驱动列表支持 绝大多数的tft屏幕在esp32 下都可以被 TFT_eSPI 驱动显示&#xff0c;以下清单中的驱动模块都可以用tft_espi来显示&#xff1a; // #define ILI9341_DRIVER // Generic driver for common displays //#define ILI9341_2_DRIVER // Alter…

借助国内ChatGPT平替+MindShow,飞速制作PPT

系列文章目录 后续补充 文章目录 系列文章目录前言一、科大讯飞“星火”认知大模型介绍二、使用步骤1.借助讯飞星火生成ppt的文案2.借助MindShow生成ppt 前言 随着人工智能技术的不断发展&#xff0c;越来越多的企业和个人开始利用自然语言处理技术来提高工作效率。其中&#…

【移动端网页布局】flex 弹性布局 ⑥ ( 设置主轴方向和是否自动换行 | flex-flow 样式说明 | 代码示例 )

文章目录 一、设置主轴方向和是否自动换行 : flex-flow 样式说明1、flex-flow 样式2、flex-flow 样式属性值 二、代码示例 一、设置主轴方向和是否自动换行 : flex-flow 样式说明 1、flex-flow 样式 flex-flow 样式 是 flex-direction 属性和 flex-wrap 属性的 复合写法 ; 设置…

Redis底层结构

https://mp.weixin.qq.com/s/MGcOl1kGuKdA7om0Ahz5IA 小林coding 介绍 Redis 数据结构并不是指 tring&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Hash&#xff08;哈希&#xff09;、Set&#xff08;集合&#xff09;和 Zset&#xff08;有序集合&am…

日撸 Java 三百行day43-44

文章目录 说明day43 插入排序思路代码 day44 希尔排序思路代码 对比 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;https://github.com/fulisha-ok/sampledat…

磁盘空间不足怎么办?释放磁盘空间的4种方法

虽然现在硬盘的空间越来越大&#xff0c;但是在这个数据爆炸的时代中&#xff0c;总是会觉得存储空间不够用&#xff0c;一不注意磁盘就满了&#xff0c;那么除了清空回收站、卸载某些程序外&#xff0c;还能怎么释放磁盘空间呢&#xff1f; 方案一&#xff1a;禁用休眠 休眠是…

KD305Y带吸收比极化指数兆欧表

一、概述 KD305Y绝缘电阻测试仪对众多的电力设备如&#xff1a;电缆、电机、发电机、变压器、互感器、高压开关、避雷器等要求做一系列的绝缘性能试验&#xff0c;首先是要做绝缘电阻测试。近年来随着电力事业的飞速发展,大容量设备的使用不断增加&#xff0c;用普通的兆欧表无…

Springboot +Flowable,服务任务ServiceTask执行的三种方式(二)

一.简介 ServiceTask 从名字上看就是服务任务&#xff0c;它的图标是像下面这样&#xff0c;截图如下&#xff1a; ServiceTask 一般由系统自动完成&#xff0c;当流程走到这一步的时候&#xff0c;不会自动停下来&#xff0c;而是会去执行我们提前在 ServiceTask 中配置好的…

ubuntu下用VirtualBox安装Windows虚拟机

1.准备工作 从清华大学信息门户——公共服务及其他——软件资源——公共软件——操作系统——Windows11处下载对应的ios系统安装软件 注意下载后将文件名中的 “ .IOS ” 大写改为 “ .ios ” 小写&#xff0c;否则后续虚拟机无法直接识别 问题提示&#xff1a; 解决iso文件不…

【unity造轮子】2d敌人AI的实现,并自动躲避障碍物

最终效果 插件链接: https://download.csdn.net/download/qq_36303853/87762376 导入AI插件 新建空物体,添加PathFinder组件,用在地图导航 渲染导航路径,绘制出来的蓝色部分则为可行走区域,非蓝色区域是我配置的碰撞器区域,可自行修改,如果不满意可以修改Diameter的…

Aztec Hybrid Rollup:混合zkRollup,而非zkEVM

1. 引言 Aztec zkRollup为混合zkRollup&#xff1a; 支持通用私有计算的加密zkRollup&#xff08;命名为Aztec&#xff09;&#xff1a;构建trustless、可扩展的、去中心化的Layer2 zkRollup&#xff0c;同时支持private smart contract execution。同时支持public state和pr…

云原生介绍

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130540430 一、云原生的概念 云原生的整体概念思路是三统一&#xff0c;即统一基础平台、统一软件架构、统一开发流程。 基于统一的基础平台、软件架构以及开发流程&#xff0c;数字化转型和云化转型能…

04- 评价指标mAP (目标检测)

要点&#xff1a; Precision (准确率 )&#xff1a;TP/(TPFP)&#xff0c;即模型给出的所有预测结果中命中真实目标的比例。Recall (召回率)&#xff1a;TP/(TPFN)&#xff0c;被找到的正确目标和所有正确目标的比值。 官方文档&#xff1a;https://cocodataset.org/#detectio…

用Python批量生成word文档

楼主有个同事妹子每天都做重复性工作而且加班到很晚。这是楼主出于兴趣帮她写的的批量生成保密协议word文档的脚本&#xff0c;共享给大家使用~1小时的工作&#xff0c;用脚本5秒钟即搞定有木有~ copy到本地存成.py文件即可使用&#xff0c;生成的文件是这样的&#xff1a; #创…

MySQL基础(十一)数据处理之增删改

1. 插入数据 1.1 实际问题 解决方式&#xff1a;使用 INSERT 语句向表中插入数据。 1.2 方式1&#xff1a;VALUES的方式添加 使用这种语法一次只能向表中插入一条数据。 情况1&#xff1a;为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....)…

文旅数字人出圈不断,文旅数字人宣传片制作赋能数字文旅新业态

在文旅产业发展中 数字人的应用越来越广泛 文旅借助数字人浪潮 把传统文化与科技相融合 以Z世代年轻群体所喜爱的方式 推动文旅数字化发展 文旅数字人应用场景——数字人文旅宣传片 可以让数字人作为文旅宣传片主角&#xff0c;串联当地代表性的历史文化地标、现代都市场景…