栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Qt学习11 Qt 中的字符串类

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt学习11 Qt 中的字符串类

Qt学习11 Qt 中的字符串类 历史遗留问题
  • C语言不支持真正意义上的字符串
  • C语言用字符数组和一组函数实现字符串操作
  • C语言不支持自定义类型,因此无法获得字符串类型
解决方案
  • 从C到C++的进化过程引入了自定义类型

  • 在C++中可以通过类完成字符串类型的定义

    C++中的原生类型系统是否包含字符串类型?

标准库STL
  • STL是意义上需要与C++一同发布的标准库
  • STL是一套以模板技术完成的C++类库
  • STL中包含了常用的算法和数据结构
  • STL中包含了字符串类
Qt VS STL
  • STL的具体实现依赖于编译器生产厂商

  • STL的 “标准” 只是其接口是标准的

    • 相同的全局函数
    • 相同的算法类和数据结构类
    • 相同的类成员函数
  • 不同厂商的编译器所带的STL存在差异

    依赖于STL开发的C++程序在不同平台上的行为可能出现差异

开发前的选择
  • 项目是否需要使用现库的支持?
    • STL?Qt?MFC?私有库?
  • 项目是否需要在不同平台间移植?
    • Linux?Windows?Android?
  • 项目是否需要图形用户界面?
    • GUI应用程序?命令行应用程序?后台服务程序?
Qt中的字符串类
  • Qt中的字符串类
    • 采用Unicode编码
    • 使用隐式共享技术来节省内存和不必要的数据拷贝
    • 跨平台使用,不必考虑字符串的平台兼容性
QString VS string
  • QString直接支持字符串和数字的相互转换
  • QString直接支持字符串的大小比较
  • QString直接支持不同字符编码间的相互转换
  • QString直接支持std::string和std::wstring的相互转换
  • QString直接支持正则表达式的应用
  • 。。。
代码示例
#include 

void Sample_1()
{
    QString s = "add";
    s.append(" ");    // "add "
    s.append("Qt");   // "add Qt"
    s.prepend(" ");   // " add Qt"
    s.prepend("C++"); // "C++ add Qt"
    qDebug() << s;
    s.replace("add", "&"); // "C++ & Qt"
    qDebug() << s;
}

void Sample_2()
{
    QString s = "";
    int index = 0;
    
    s.sprintf("%d. I'm %s, thank you!", 1, "Delphi Tang"); // "1. I'm Delphi Tang, thank you!"
    qDebug() << s;
    
    index = s.indexOf(",");
    s = s.mid(0, index);   // "1. I'm Delphi Tang"
    qDebug() << s;
    
    index = s.indexOf(".");
    s = s.mid(index + 1, s.length()); // " I'm Delphi Tang"
    s = s.trimmed();                  // "I'm Delphi Tang"
    qDebug() << s;

    index = s.indexOf(" ");
    s = s.mid(index + 1, s.length()); // "Delphi Tang"
    qDebug() << s;
}

void Sample_3(QString* a, int len)
{
    for(int i = 0; i < len; i++) {
        for(int j=i+1; j
            if( a[j] < a[i] ) {
                QString tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

int main()
{
    qDebug() << "Sample_1:";
    Sample_1();
    qDebug() << endl;
    qDebug() << "Sample_2:";

    Sample_2();
    qDebug() << endl;

    qDebug() << "Sample_3:";
    QString company[5] = {
        QString("Oracle"),
        QString("Borland"),
        QString("Microsoft"),
        QString("IBM"),
        QString("D.T.Software")
    };
    Sample_3(company, 5);
    for(int i = 0; i < 5; i++) {
        qDebug() << company[i];
    }

    return 0;
}
Qt中的QString
  • QString在Qt库中几乎是无所不在的
  • 所有的Qt图形用户组件都依赖于QString
为计算器程序添加消息相应
// 之前代码中的内容
void QCalculatorUI::onButtonClicked()
{
    QPushButton* btn = (QPushButton*)sender();
    QString clickText = btn->text();

    if ( clickText == "<-" ) {
        QString text = m_edit->text();
        if ( text.length() > 0 ) {
            text.remove(text.length()-1, 1);
            m_edit->setText(text);
        }
    }
    else if ( clickText == "C" ) {
        m_edit->setText("");
    }
    else if ( clickText == "=" ) {
    }
    else {
        m_edit->setText(m_edit->text() + clickText);
    }
}
小结
  • 应用开发大多数的情况都在进行字符串处理
  • Qt比STL更适合于跨平台开发的场景
  • Qt中的QString比STL中string更强大易用
  • Qt图形用户组件都依赖于QString
  • 项目开发时需要综合各种选择需要使用的库
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号