Qt--QString

本文详细介绍了Qt中的QString类,包括其Unicode字符存储、隐式共享特性以及丰富的操作函数,如组合、查询、比较、替代、截取和删除等。此外,还讨论了QString与其他数据类型的转换,如与数值类型、QByteArray和char*的相互转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Qt字符串类–QString

QString类是Qt提供的功能十分强大的字符串类,由QtCore共享库实现。标准C++提供了两种字符串:C语言风格的以“\0”字符结尾的字符数组和字符串类String。而QString类提供了了一种Unicode字符串类。QString类内部存储了16bit的QChar字符,每个QChar字符代表一个Unicode4.0字符。Unicode字符集是ASCII和Latin-1字符集的超集,能够表示世界上绝大多数书写系统中的字符。QString类采用隐式共享(implict sharing)来减少对内存的使用和避免没必要的数据复制操作,同时,QString变量中不仅可以包含“\0”,而且我们也不必担心字符串数组要以“\0”结尾,这些QString类都帮我们处理好了。QString类还提供了丰富的操作函数,可以非常方便地进行字符串操作和QString类与其他数据类型的转换。

二、QString初始化

Qt官方文档给出了QString变量5种初始化的方式,下面举例3种常用的方式。

    QString str1 = "Hello World!";

    static const QChar str_data[] = {
  
  'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'};
    QString str2(str_data, 12);   // QString str2(str_data, sizeof(str_data)/2);

    QString str3;
    str3.resize(12);
    str3[0] = QChar('H');
    str3[1] = QChar('e');
    str3[2] = QChar('l');
    str3[3] = QChar('l');
    str3[4] = QChar('o');
    str3[5] = QChar(' ');
    str3[6] = QChar('W');
    str3[7] = QChar('o');
    str3[8] = QChar('r');
    str3[9] = QChar('l');
    str3[10] = QChar('d');
    str3[11] = QChar('!');

    qDebug() << str1 << str2 << str3;

Qchar类中没有获得其数组长度的成员函数,但是由于QChar为16bit的Unicode字符,所以可以通过sizeof()/2来获取QChar数组的长度。

三、QString操作

1 组合

QString类提供了很多种组合字符串的方法如下:

(1) “+”和“+=”操作符重载

    QString str1 = "Hello ";
    QString str2 = "World!";
    QString str3 = str1 + str2;
    QString str3 = str1 + "World!";
    QString str1 += "World!";

需要注意的是,使用”+”和”+=”进行QString连接时,操作数必须至少有一个是QString类,否则无法重载操作符。

(2) append(), prepend(), insert()函数

    QString str1 = "Hello ";
    QString str2 = "World!";
    str1.append("World!");     // 在字符串str1最后插入字符串"World!"
    str2.prepend("Hello ");    // 在字符串str2最前面插入字符串"Hello "
    QString str3 = "World!";   
    str3.insert(0, str2);      // 在字符串str3位置0处插入字符串str2

(3) sprintf()函数

    QString str1, str2;
    str1.sprintf("%s", "Hello ");                // str1 = "Hello "
### QT MVVM开发模式介绍 #### 一、MVVM模式概述 MVVM即Model-View-ViewModel,这是一种用于构建用户界面的软件架构模式,在2005年由微软推出并广泛应用于WPF项目开发中[^3]。该模式旨在分离关注点,使得UI设计者可以专注于视图的设计,而开发者则能集中精力处理业务逻辑。 #### 二、Qt中的MVVM实现 在Qt环境中应用MVVM模式意味着通过特定机制让模型(Model)与试图(View)之间间接通信,这种间接性由视图模型(ViewModel)提供支持。借助于信号槽机制和属性系统,Qt允许创建双向的数据绑定关系,从而简化了复杂GUI程序的编写过程[^4]。 对于`qt-mvym-develop`这一表述可能存在笔误,“mvym”应更正为“mvvm”。因此,这里讨论的是采用Qt框架下的MVVM方式进行应用程序开发的过程和技术要点。 ```cpp // 定义一个简单的Person类作为Model部分 class Person : public QObject { Q_OBJECT public: explicit Person(QObject *parent = nullptr); private slots: void onNameChanged(); signals: void nameChanged(const QString &newName); public: Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged) private: QString m_name; }; // ViewModel负责管理Model的状态并向View暴露必要的接口 class PersonViewModel : public QObject { Q_OBJECT Q_SIGNALS: void personNameUpdated(const QString&); public: void setPerson(Person* p){ connect(p,&Person::nameChanged,this,[=](const QString& newName){emit personNameUpdated(newName);}); } }; ``` 上述代码片段展示了一个基础版本的人名管理案例,其中包含了Model层(`Person`)同ViewModel层(`PersonViewModel`)之间的交互方式。当`Person`对象的名字发生改变时会触发相应的slot函数更新到`PersonViewModel`实例上,并向外发出通知以便同步至对应的UI组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值