Qt5学习-模板库、工具类、控件-1

来源:互联网 发布:js获取当前时间格式化 编辑:程序博客网 时间:2024/06/05 18:24

一、操作字符串类

QString 类相对于 传统C++ 的字符串(以 \0 结尾的C语言风格 and String类), 提供 QString 更为强大,保存16位Unicode的值,使用 隐式共享和内存分配策略 优化。

1、操作字符串

    
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    // 操作字符串
    QString str = "abc"; // abc
    qDebug() << str << endl; // 输出
    str = str + "def"; // abcdef
    qDebug() << str << endl;
    // 追加 + 或者 append
    str.append("qwe");
    qDebug() << str << endl;
    // sprintf
    str.sprintf("%s", "123"); // 123
    qDebug() << str << endl;
    str.sprintf("%s %s", "123", "456"); // 123 456
    qDebug() << str << endl;
    // arg()函数 可以处理多种类型的数据类型 安全
    QString  str11;
    str11 = QString("%1 and %2 are friends! %3").arg("husky").arg("cc").arg(1314);
    qDebug() << str11 << endl;
    // 其他组合字符串的方法
    QString  str1 = "123";
    QString  str2 = "qwe";
    QString  str3 = "asd";
    str1.insert(2, "abc"); // 12abc3
    qDebug() << str1 << endl;
    str2.prepend(str3); // asdqwe
    qDebug() << str2 << endl;
    str3.replace(QRegExp("as"), "qqq"); // qqqd
    qDebug() << str3 << endl;
    // 移除字符串两端的空白字符
    str = "  123 \t \n 456   ";
    //str.trimmed();
    qDebug() << str.trimmed() << endl; // "123 \t \n 456"
    str = "  123 \t \n 456   ";
    //str.simplified();
    qDebug() << str.simplified() << endl; // "123 456"
    
    return a.exec();
}
    

2、查询字符串数据

    // 查询字符串数据    QString  str4 = "123 456 789";    QString  str5 = "qwe";    QString  str6 = "asd";    // 是否以 str 开头 / 结尾    if (str4.startsWith("123", Qt::CaseSensitive))    {        qDebug() << "yes 是以 123 开头" << endl;    }    else    {        qDebug() << "no" << endl;    }    if (str4.endsWith("456"))    {        qDebug() << "yes 是以 456 结尾" << endl;    }    else    {        qDebug() << "no" << endl;    }    // 是否包含    if (str4.contains("456"))    {        qDebug() << "yes" << endl;    }    // < > <= >= == != 和 C++ 中的一样    // localeAwareCompare(a, b) compare()    // a > b 返回正值 a < b 负值 a==b 0    qDebug() << QString::localeAwareCompare(str5, str6) << endl;    qDebug() << QString::compare(str6, str5) << endl;


// 查询字符串数据
    QString  str4 = "123 456 789";
    QString  str5 = "qwe";
    QString  str6 = "asd";
    // 是否以 str 开头 / 结尾
    if (str4.startsWith("123", Qt::CaseSensitive))
    {
        qDebug() << "yes 是以 123 开头" << endl;
    }
    else
    {
        qDebug() << "no" << endl;
    }
    if (str4.endsWith("456"))
    {
        qDebug() << "yes 是以 456 结尾" << endl;
    }
    else
    {
        qDebug() << "no" << endl;
    }
    // 是否包含
    if (str4.contains("456"))
    {
        qDebug() << "yes" << endl;
    }
    // < > <= >= == !=  C++ 中的一样
    // localeAwareCompare(a, b) compare()
    // a > b 返回正值 a < b 负值 a==b 0
    qDebug() << QString::localeAwareCompare(str5, str6) << endl;
    qDebug() << QString::compare(str6, str5) << endl;

3、字符串的转换

    // 字符串的转换    str = "1256";    bool ok; // 转化是否成功    // 第二个参数为 基数 0->C语言的转化方法 以0开头->基数为8 0x开头->基数16     // 其他 10    str.toInt(&ok, 10); // toFloat() toDouble()    // 注: QByteArray 既可以存储原始字节 也可以 存储 \0 结尾的传统字符串

4、NUll字符串与空字符串的区别

    // NULL 与 空字符串 区别    QString().isNull(); // true    QString().isEmpty(); // true    QString("").isNull(); // false     QString("").isEmpty(); // true


    // NULL  空字符串 区别
    QString().isNull(); // true
    QString().isEmpty(); // true
    QString("").isNull(); // false 
    QString("").isEmpty(); // true

二、容器类

相对于C++中的,更安全、轻量、容易使用,速度,内存优化
Qt的数据必须是可以赋值的数据类型, 也就是必须提供一个默认构造函数, 复制构造函数, 赋值操作运算符(QObject和其他子类(QWidget、Qdialog))不可以存放在容器内~!
不过可以用指针化解。


(具体的操作和c++中模板类似, 需要去查帮助文档)

1.Qlist类(小内存直接存放到数组,大内存存储指向对象指针)

最常用的

2.QLinkedList类(链式存储)

3.QVector类(连续存储)

4.QMAP类(C++)

5.QHash类(C++

6.迭代器的使用(两种方式 java and C++)

7.QVariant类:相当于一个c++联合数据类型,可以存储超多类型的值

三、算法(几乎就是q加功能)及正则表达式
    // 一些简单的算法    double aa = 10.0, bb = 20.0;    double cc = qMax(aa, bb);    double dd = -12;    dd = qAbs(dd);    int bn = qRound(bb);    qSwap(aa, bb);
正则表达式:表达式 + 量词 + 断言


原创粉丝点击