QT翻書
阿新 • • 發佈:2021-07-18
為什麼是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 //至此已讀入值的等價字元數 %[] //掃描字元集合 %% //讀%符號QDebug常用操作*/ 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(); }
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常用使用