您的位置:首页 > 教育 > 锐评 > 建筑工地老板直招工人_163企业邮箱官网入口_黑马培训机构_十大搜索引擎地址

建筑工地老板直招工人_163企业邮箱官网入口_黑马培训机构_十大搜索引擎地址

2025/1/11 22:15:25 来源:https://blog.csdn.net/qq_43424630/article/details/145035851  浏览:    关键词:建筑工地老板直招工人_163企业邮箱官网入口_黑马培训机构_十大搜索引擎地址
建筑工地老板直招工人_163企业邮箱官网入口_黑马培训机构_十大搜索引擎地址

QT的字符串类型

常用QString代替C++的String,QVariant可存放多种类型

语言字符串类型
cchar*
c++string、char*
QTQByteArray、QString、QVariant

QByteArray

c语言中 char*的升级版本,其实就是对**char ***进行一次封装

常用的API

  • 构造函数:QByteArray::QByteArray(const char *data, int size = -1);

    • 将data中的size个字符进行构造, 得到一个字节数组对象, size==-1 函数内部自动计算字符串长度。
  • 数据操作:

    • 尾部追加数据:append、push_back

    • 头部追加数据:prepend、push_front

    • 插入数据:insert

    • 删除数据:remove、chpo、truncate、clear

      • 从字符串中删除len个字符, 从第pos个字符的位置开始删除
        QByteArray &QByteArray::remove(int pos, int len);

      • 尾部删除 n 个字节

        void QByteArray::chop(int n);

      • pos 位置将数组截断 (前边部分留下, 后边部分被删除)

      • void QByteArray::truncate(int pos);

  • 字符串替换:before 替换 after

    • QByteArray &QByteArray::replace(const QByteArray &before, const QByteArray &after);
  • 子字符串查找

    • 是否包含子字符串:bool QByteArray::contains(const QByteArray &ba) const;
    • 是否以字符串开始:bool QByteArray::startsWith(const QByteArray &ba) const;
    • 是否以字符串结尾:bool QByteArray::endsWith(const QByteArray &ba) const;
  • 类型转换

    • int, short, long, float, double -> QByteArray:setNumnumber
    • QByteArray -> int, short, long, float, double:toInt
    • string -> QByteArray:fromStdString
    • QByteArray -> string:toStdString
    • 转换为大写:toUpper

QString(常用)

QString:可以对QByteArray再进行一次封装,内部的编码为utf8

构造函数:

  • QString::QString(const char *str);

  • QString::QString(const QByteArray &ba);

常用API

  • 数据操作:append、push_back、prepend、push_front、insert、remove

  • 字符串替换:replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);

  • 子字符串查找:contains、startsWith、endsWith

  • 类型转换:同理

  • 字符串格式化:arg()

    Qstring str = Qstring("(%1)有(%2)个徒弟,分别是(%3),(%4),(%5)").arg("唐僧").arg(3).arg("孙悟空").arg("猪八戒").arg("沙僧");
    

QByteArray与QString的区别

  1. QString中可以通过arg函数进行动态拼接

  2. 计算字符串的长度不同

    原因:QString采用的是UTF-8编码,则每个字符的长度都是一致的。而QByteArray没有改变 char* 的编码。

//计算对象中的字符串长度
// 长度是字符个数,一个汉字算一个字符
QString tmp ="我很帅呦,吼吼吼..", //len:12
// 长度是字符串占用的字节数,一个汉字3个字节
QByteArray tmp1 ="我很帅呦,吼吼吼..."; //len:26

QVariant

目的是对几种不同的数据类型进行传递。结构体不方便,容器则只能保存单一的数据类型。

QVariant 可以保存很多Qt的数据类型,包括QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、 QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize、QString,并且还有C++基本类型,如 int、float等。

构造函数QVariant::QVariant(const QString &val);

常用API

  • 设置函数也可以将支持的类型的数据设置到QVariant对象中:

    • void QVariant::setValue(const T &value);

    • QVariant QVariant::fromValue(const T &value);

      QVariant v;
      v.setValue(5);
      //例子2
      QVariant v = QVariant::fromValue(5);
      int i = v.toInt();          // i is now 5
      QString s = v.toString();   // s is now "5"
      
  • 判断 QVariant中封装的实际数据类型QVariant::type() const;

    //传入QVariant两个参数,返回QVariant
    QVariant MainWindow::dataPlus(QVariant a, QVariant b) {OVariant ret;// 判断当前参数的类型是字符串还是整形数if(a.type()== QVariant::Int && b.type()== QVariant::Int)ret = QVariant(a.toInt()+ b.toInt()); 
    }
    
  • 将QVariant对象转换为实际的数据类型QString QVariant::toString() const;

自定义类型如何使用QVariant封装

自定义的类型也可以使用QVariant类进行封装, 被QVariant存储的数据类型需要有一个默认的构造函数和一个拷贝构造函数。为了实现这个功能,首先必须使用Q_DECLARE_METATYPE()宏。

  1. 先使用Q_DECLARE_METATYPE(Type)宏声明自定义类
  2. 通过两种转换方法转成QVariant(``setValue 和 fromValue`)
  3. 使用时通过canConvert判断是否为自定义类型
  4. 通过value提取出QVariant的值
// 自定义类型注册
Q_DECLARE_METATYPE(MyTest)
// 值的封装
QVariant vt = QVariant::fromValue(t);
// 值的读取
if(vt.canConvert<MyTest>())
{MyTest t = vt.value<MyTest>();qDebug() << "name: " << t.name << ", num: " << t.num;
}
// 如果当前QVariant对象可用转换为对应的模板类型 T, 返回true, 否则返回false
bool QVariant::canConvert() const;
// 将当前QVariant对象转换为实际的 T 类型
T QVariant::value() const;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com