1. 程式人生 > 其它 >QT翻書

QT翻書

為什麼是QT?

  公司專案大部分都是QT開發的,我一個做測試要看的懂他們程式碼才行,所以才有了不求甚解的學習。我又不用寫程式,只要能看個大概就行。大家都很忙,沒必要深入學習了。換句話說我不是為了學,而是為了玩。是一個毫無負擔的狀態。有時間就更新,沒時間就扔下一段。

學習計劃

  先列一個學習計劃吧,後面慢慢維護。

學習計劃
學習專案 學習時間 關聯 備註
QDebug 跳轉
QString

常用類

  本文選擇幾個常用類,不是說QT要用的,而是任何程式設計都要用到 常用輸入輸出、字串型別、數值型別、陣列容器。不管哪種語言這些都需要先了解。走起!

QDebug

  這個類是用來輸出列印資訊的。

#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    /*
       //  注:
       %a,%A  //讀入一個浮點值(僅C99有效)
       %c     //讀入一個字元
       %d     //讀入十進位制整數
       %i     //讀入十進位制,八進位制,十六進位制整數
       %o     //讀入八進位制整數
       %x,%X  //讀入十六進位制整數
       %s     //讀入一個字串,遇空格、製表符或換行符結束。
       %f,%F,%e,%E,%g,%G    //用來輸入實數,可以用小數形式或指數形式輸入。
       %p     // 讀入一個指標
       %u     //讀入一個無符號十進位制整數
       %n     //至此已讀入值的等價字元數
       %[]    //掃描字元集合
       %%     //讀%符號
     
*/ QString s = "Jack"; qDebug() << "My name is " << s << ", nice to meet you!"; qDebug("Items in list: %d", 10); // 第一種方式,不像java,不推薦使用,你們不覺得這玩意反人類嗎,我還要記那麼多無用的助記符。 qDebug("XXXX%d", 111); // 第二種方式 中間孩他媽帶空格 坑爹啊噁心,逼著你用上面那種死爛方式 qDebug() << "xjkxjxkjk
" << 1110 << "\n"; qDebug() << QObject::tr("中文"); QString str9 = "G:\\Qt5Book\\QT5.9Study\\qw.cpp"; // 還是個坑,對於\\不是轉義為\,太他媽坑了。處處坑。 qDebug().noquote() << str9 << str9.contains(".cpp", Qt::CaseInsensitive); return a.exec(); }
QDebug常用操作

QString

  字串是最常用的,用法太多。

定義

常用使用

#include <QCoreApplication>
#include <QDebug>

int main()
{
    // 第一種定義方法
    QString str1 = "", str2 = "";

    // 輸出帶著“”  亂七八糟的什麼玩意。
    qDebug() << str1;
    QString str3 = str1 + str2;
    str3.append(str2);
    qDebug() << str3;
    str3.append("xxxddddss");
    str3 += "ddfdfdf";
    qDebug() << "+++++++++" << str3;

    //    x.insert(x.size(), y);
    str3.insert(str3.size(), "iiiiiiiiiii");

    qDebug() << str3 << "$$$$$$$$$$$$" << str3.remove(3, 6);

    // prepend()函式,往前面加入pppppp
    str3.prepend("pppppppp");

    // sprintf
    str3.sprintf("%s %.1f%%", "perfect competition", 100.0);
    qDebug() << "@@@@@@@@@@@" << str3;

    //    arg()函式:
    //    從另外一個字串或數字來構建字串的另外一種方式
    QString str33 = QString("xxxx%1eeee%2ffffff").arg("ABC").arg(123);
    qDebug() << str33;

    // toUpper() 將字串內的字母全部轉換為大寫形式,toLower() 將字母全部轉換為小寫形式
    QString str4;

    str4 = str3.toUpper();
    qDebug() << "---+++++++++++" << str3;
    str4 = str3.toLower();
    qDebug() << str4;

    // count()、size() 和 length() 都返回字串的字元個數,
    // 這 3 個函式是相同的,但是要注意,字串中如果有漢字,一個漢字算一個字元。
    qDebug() << str4.count();
    qDebug() << str4.size();
    qDebug() << str4.length();

    // trimmed() 去掉字串首尾的空格,
    // simplified() 不僅去掉首尾的空格,中間連續的空格也用一個空格替換
    str4.append("              ");
    qDebug() << str4;
    qDebug() << str4.trimmed();
    QString str5 = "           xdsdsdsdd      sddsxsdseee            ";
    qDebug() << str5;
    qDebug() << str5.simplified();


    // int indexOf (const QString &str, int from = 0 , Qt::CaseSensitivity cs =
    // Qt::CaseSensitive) const
    // 媽的竟然從0開始
    int x0 = str4.indexOf("xx");
    qDebug() << "字串:" << str4 << ",xx所在位置:" << x0;

    int x00 = str4.indexOf("x");
    qDebug() << "字串:" << str4 << ",x所在位置:" << x00;
    int x000 = str5.indexOf("x", 11);
    qDebug() << "字串:" << str5 << ",x所在位置:" << x000;
    int x0000 = str5.indexOf("x", 12);
    qDebug() << "字串:" << str5 << ",x所在位置:" << x0000;

    qDebug() << x0;
    QString str6 = "G:\\Qt5Book\\QT5.9Study\\qw.cpp";
    int     x1 = str6.indexOf("5.9");    // N=13
    int     x2 = str6.lastIndexOf("\\"); // N=21
    qDebug() << x1 << x2;

    // isNull() 和 isEmpty()
    // 如果一個空字串,只有“\0”,isNull() 返回 false,而 isEmpty() 返回 true;只有未賦值的字串,isNull()
    // 才返回 true。
    QString str7 = "";
    QString str8;
    qDebug() << str7.isNull(); // 只有str沒有賦值才是true
    qDebug() << str7.isEmpty();
    qDebug() << str8.isNull();
    qDebug() << str8.isEmpty();

    // contains()
    //    判斷字串內是否包含某個字串,可指定是否區分大小寫。
    qDebug() << str4.trimmed() << "是否包含xx:" << str4.trimmed().contains("xx");
    qDebug() << str4.trimmed() << "是否包含123:" << str4.trimmed().contains("123");
    qDebug() << str4.trimmed() << "是否包含\0:" << str4.trimmed().contains("\0");
    qDebug() << str4 << "是否包含 :" << str4.contains(" ");

    QString str9 = "G:\\Qt5Book\\QT5.9Study\\qw.cpp";

    // 此處大坑啊 媽的轉義了還輸出,真jb蛋疼
    qDebug().noquote() << str9 << str9.contains(".cpp", Qt::CaseInsensitive); //
    qDebug().noquote() << str9 << str9.contains(".CPP", Qt::CaseSensitive);   //

    //    endsWith() 和 startsWith()
    //    startsWith() 判斷是否以某個字串幵頭,endsWith() 判斷是否以某個字串結束。
    qDebug() << str9.endsWith("cpp");
    qDebug() << str9.startsWith("G");
    qDebug() << str9.startsWith("g", Qt::CaseSensitive);
    qDebug() << str9.startsWith("g", Qt::CaseInsensitive);

    // left() 和 right() mid()
    //    left 表示從字串中取左邊多少個字元,
    // right 表示從字串中取右邊多少個字元。注意,一個漢字被當作一個字元。
    qDebug() << str9.left(3);                // 返回左起3個字元
    qDebug() << str9.right(4);               // 返回左起3個字元
    qDebug() << "#######" << str9.mid(5, 3); // 返回從5起3個字元
    qDebug() << "#######" << str9.mid(5);    // 返回從5起到結尾


    //    部分section() 函式的原型為:
    //    QString section (const QString &sep, int start, int end = -1,
    // SectionFlags flags = SectionDefault) const

    qDebug() << "xxxddd" << str9.section("c", 0);
    QString str12, str11 = "學生姓名,男,1984-3-4,漢族,山東";

    //按,分割
    // str2="學生姓名", 第 1 段的編號為 0
    qDebug() << "====" << str11.section(",", 0);
    qDebug() << "====" << str11.section(",", 0, 2); // 取0-2列
    qDebug() << "====" << str11.section(",", 1, 2); // 取1-2列
    qDebug() << "====" << str11.section(",", 2, 2); // 取2-2列
    qDebug() << "====" << str11.section(",", 3, 4); // 取3-4列
    qDebug() << "====" << str11.section(",", 4);    // 取3-4列
    // 取連續兩段,從0,0開始
    qDebug() << "----1" << str9.section("c", 0, 2);
    qDebug() << "----2" << str9.section("c", 1);
    qDebug() << "----3" << str9.section("c", 0, 0);
    qDebug() << "----4" << str9.section("c", 0, 1);
    qDebug() << "----5" << str9.section("c", 1, 1);


    // 字串與數字的轉換
    //    QString能將數字轉換為字串,通過使用靜態函式QString::number():
    // 數字轉字串
    QString str13 = QString::number(59.6);
    str13.setNum(999.999);
    qDebug() << "-----6" << str13;

    // 字串轉數字 , 又是一個大坑,double不能變int,丟精度也不行。真太差勁
    //    int si1 = QString::toInt(str13);
    int si1 = str13.toInt();
    double sd1 = str13.toDouble();
    str13 = "12.33";
    int si2 = str13.toInt();
    qDebug() << "si1" << si1;
    qDebug() << "si2" << si2;
    qDebug() << "sd1" << sd1;
    bool ok1; double dd1 = str13.toDouble(&ok1);
    qDebug() << "boolean" << ok1 << ",dd=" << dd1;
    bool ok2; int dd2 = str13.toInt(&ok2);
    qDebug() << "boolean" << ok2 << ",dd=" << dd2;


    // replace 用一個字串替換另一個字串的某一部分
    QString str14 = "a cloudy day";

    //    str14.replace(2, 6, "sunny");
    str14.replace("C", "d", Qt::CaseSensitive);
    str14.replace("C", "d", Qt::CaseInsensitive);
    qDebug() << str14;


    //    QString::split()函式拆分字串:
    //    一個字串能被分成為一個裝有子串的QStringList。
    QString str15 = "polluter pays principle";
    QStringList words = str15.split(" ");
    qDebug() << words;
    words.sort();
    str15 = words.join("\n");
    qDebug() << str15;

    // 根據空格拆分字串

    str15 += "中文";

    // QString轉char*
    char *ch1;
    QByteArray ba = str15.toLatin1();
    ch1 = ba.data();
    qDebug() << ch1;
    std::string str = str15.toStdString();
    const char *ch2 = str.c_str();
    qDebug() << ch2;
    return 0;
}
QString常用使用