当前位置: 首页 > article >正文

(5)Qt—ui常用类

目录

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.kler.cn/a/17750.html

相关文章:

  • JFROG相关API
  • Nuxt 版本 2 和 版本 3 的区别
  • Scala入门基础(17.1)Set集习题
  • 【pytorch】常用强化学习算法实现(持续更新)
  • 01-Ajax入门与axios使用、URL知识
  • 040 线程池
  • webconsole使用方法(fastapi框架)
  • 【第四篇:解决校招面试中的测试设计题目】
  • 蓝牙耳机什么牌子好?500内好用的蓝牙耳机推荐
  • Oracle 修改 sga_target 参数设置,虚拟内存值设置
  • 如何设计一个可扩展的优惠券功能
  • 磁盘U盘变本地磁盘寻回教程
  • 古剑飞仙手游Linux系统服务器架设教程
  • “中特估”乘风破浪!后续机遇在哪?
  • Java9比Java8改进了什么
  • SHOP.COM EDI需求分析
  • PHP程序员和Python程序员的职业前景怎么样?我来聊聊自己的体会
  • 作业3:智能汽车车载网络
  • 为什么要建数据仓库,而不是直连数据源?
  • maven依赖jar包时版本冲突的解决
  • JVM系列-第5章-堆(JVisualVM)
  • ChatGPT带你一起了解C语言中的fseek()
  • MATLAB实现工业PCB电路板缺陷识别和检测
  • 【Python入门】Pycharm的使用指南
  • 【Stable Diffusion】ControlNet基本教程(三)
  • 想要跳槽涨薪 那你准备拿下 Framework 了吗?