版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.數(shù)據(jù)類型集合和文件Qt in EducationThis work is a Chinese translation of the original Qt Educational Training Materials published by Nokia: 2021 Nokia Corporation and its Subsidiary(-ies).Nokia, Qt and the Nokia and Qt logos are the registered trademarks of Nokia Corporation in Finland and other countries wor
2、ldwide.This translation was created by Communication and Computer Network Laboratory of Guangdong Province, South China University of Technology. 2021 Communication and Computer Network Laboratory of Guangdong Province, South China University of Technology.The enclosed Qt Educational Training Materi
3、als are provided under the Creative Commons Attribution-Non-Commercial-Share Alike 2.5 License Agreement. The full license text is available here: ://licenses/by-nc-sa/2.5/legalcode. 此文檔內(nèi)容是由諾基亞公司發(fā)布的原創(chuàng)Qt教育培訓(xùn)文檔的中文翻譯: 2021諾基亞公司及其附屬公司。Nokia (諾基亞),Qt以及Nokia與Qt商標(biāo)是Nokia公司在芬蘭和全球其他國家的注冊(cè)商標(biāo)。
4、 該翻譯版本由 華南理工大學(xué)廣東省計(jì)算機(jī)網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室 創(chuàng)造。 2021 華南理工大學(xué)廣東省計(jì)算機(jī)網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室本Qt 教育培訓(xùn)材料依照署名-非商業(yè)性使用-相同方式共享 2.5許可協(xié)議Creative Commons Attribution-Non-Commercial-Share Alike 2.5 License Agreement發(fā)布。完整的許可證文本可以在這里找到: ://licenses/by-nc-sa/2.5/legalcode。 管理文本簡單的C字符串是方便的,但這僅限于本地字符編碼QString類試圖成為現(xiàn)代的字符串類Unicode 和
5、codecs隱式共享的性能char *text = Hello world!;QString支持存儲(chǔ)Unicode字符串,幾乎當(dāng)前在用的所有書寫系統(tǒng)都能表示支持從不同的本地編碼轉(zhuǎn)換或者轉(zhuǎn)成不同的本地編碼提供了一個(gè)方便的字符串檢查和修改的APIQString:toAscii QString:toLatin1 QString:toLocal8Bit建立字符串有三種建立字符串的主要方法運(yùn)算符+ 方法QStringBuilder 的方法arg 方法QString res = QString(Hello %1, the value is %2) .arg(name) .arg(42);QString r
6、es = Hello “ + name + “, the value is + QString:number(42);QString res = Hello “ % name % “, the value is % QString:number(42);QStringBuilder使用+運(yùn)算符來連接字符串,這需要屢次內(nèi)存分配和字符串長度檢查一個(gè)更好的方式是包含QStringBuilder并使用操作符該字符串生成器在連接之前一次性收集所有字符串的長度,只需執(zhí)行一次內(nèi)存分配QString res = Hello “ % name % “, the value is % % QString:numb
7、er(42);QString temp = Hello “;temp = temp % name;temp = temp % “, the value is % temp = temp % QString:number(42);分成多個(gè)小步驟連接字符串會(huì)降低性能QString:argarg方法用值來替換 %1-99 可以處理字符串,字符,整型和浮點(diǎn)型能在數(shù)字基數(shù)之間轉(zhuǎn)換%1 + %2 = %3, the sum is %3.).arg(value, width, base, fillChar);.).arg(42, 3, 16, QChar(0); / Results in 02a.).arg
8、(QString, . QString).).arg(int a).).arg(uint a).).arg(long a).).arg(ulong a).).arg(qlonglong a).).arg(qulonglong a).).arg(short a).).arg(ushort a).).arg(QChar a).).arg(char a).).arg(double a)n的所有實(shí)例都被替換每次上限為9個(gè)參數(shù) 子串使用left, right 和 mid訪問子串如果mid不指定長度,那么返回字符串的剩余局部用 replace查找和替代字符串QString s = Hello world!
9、;r = s.left(5); / Hellor = s.right(1); / !r = s.mid(6,5); / worldr = s.mid(6); / world!r = s.replace(world, universe); / Hello universe!打印到控制臺(tái)Qt是一個(gè)主要用于可視應(yīng)用的工具包,即不專注于命令行界面的要打印, 用 qDebug 函數(shù)它總是可用, 但是在建立發(fā)布版本時(shí)會(huì)靜默像printf 函數(shù)那樣工作 (但加上 “n)使用qPrintable宏很容易打印QString的文本當(dāng)包含QtDebug后,能與流操作符一起使用qDebug(Integer value
10、: %d, 42);qDebug(String value: %s, qPrintable(myQString);#include qDebug() Integer value: 42;qDebug() String value: myQString;qDebug() Complex value: myQColor;與數(shù)字間轉(zhuǎn)換把數(shù)字轉(zhuǎn)換為字符串把字符串轉(zhuǎn)換為數(shù)值 QString:number(int value, int base=10);QString twelve = QString:number(12); / 12QString oneTwo = QString:number(0 x1
11、2, 16); / 12QString:number(double value, char format=g, int precision=6);QString piAuto = QString:number(M_PI); / 3.14159QString piScientific = QString:number(M_PI,e); / 3.141593e+00QString piFixedDecimal = QString:number(M_PI,f,2); / 3.14bool ok;QString i = 12;int value = i.toInt(&ok);if(ok) / Conv
12、erted okbool ok;QString d = 12.36e-2;double value = d.toDouble(&ok);if(ok) / Converted ok不能處理千分位與std:(w)string一起工作當(dāng)連接第三方庫和其他代碼時(shí),與標(biāo)準(zhǔn)庫的字符串轉(zhuǎn)換很方便從標(biāo)準(zhǔn)庫的字串轉(zhuǎn)換成其他 轉(zhuǎn)成標(biāo)準(zhǔn)庫字符串QString qs = Hello world!;std:string ss = qs.toStdString();std:wstring sws = qs.toStdWString();std:string ss = Hello world!;std:wstring sw
13、s = Hello world!;QString qss = QString:fromStdString(ss);QString qsws = QString:fromStdWString(sws);假定為ASCIIEmpty字符串和null字符串一個(gè)QString可以為null, 即什么也沒有包含它也可是empty,即包含 一個(gè)空字符串QString e = ;e.isNull(); / falsee.isEmpty(); / trueQString n = QString();n.isNull(); / truen.isEmpty(); / true相對(duì)于一個(gè)empty字符串來說,傳遞沒有
14、字符的串是非常有用的,見QInputDialog:gettext 當(dāng)取消時(shí)返回一個(gè)null字符串分割和組合一個(gè)QString 能夠被分割成子串由此產(chǎn)生的對(duì)象是QstringList,它可被組合成一個(gè)QStringQString whole = Stockholm - Copenhagen - Oslo - Helsinki;QStringList parts = whole.split( - );QString wholeAgain = parts.join(, ); / Results in Stockholm, Copenhagen, Oslo, HelsinkiQStringListQS
15、tringList是一個(gè)專門列表類型為存儲(chǔ)字符串而設(shè)計(jì) 提供了一個(gè)方便的作用于列表中字符串的API這個(gè)類使用隱含共享副本修改作為const引用傳遞的代價(jià)低建立和修改字符串列表用 操作符把字符串增加到字符串列表replaceInStrings函數(shù)能讓你在QStringList的所有字符串中進(jìn)行搜索和替換。 QStringList verbs; verbs = running walking compiling linking; qDebug() verbs; / (running, walking, compiling, linking) verbs.replaceInStrings(ing,
16、er); qDebug() verbs; / (runner, walker, compiler, linker) 排序與篩選QStringList可以進(jìn)行排序.篩選.及去除重復(fù)的條目qDebug() capitals; / (Stockholm, Oslo, Helsinki, Copenhagen) capitals.sort();qDebug() capitals; / (Copenhagen, Helsinki, Oslo, Stockholm) QStringList capitalsWithO = capitals.filter(o);qDebug() capitalsWithO;
17、 / (Copenhagen, Oslo, Stockholm) capitals capitalsWithO;qDebug() capitals; / (Copenhagen, Helsinki, Oslo, Stockholm, / Copenhagen, Oslo, Stockholm) capitals.removeDuplicates();qDebug() capitals; / (Copenhagen, Helsinki, Oslo, Stockholm) 默認(rèn)區(qū)分大小 寫遍歷字符串使用操作符 和 length 函數(shù),你可以遍歷QStringList的內(nèi)容另一種方法是使用at()
18、函數(shù),它提供列表項(xiàng)的只讀訪問你也可以使用foreach 宏QStringList capitals;for(int i=0; icapitals.length(); +i) qDebug() capitalsi;QStringList capitals;foreach(const QString &city, capitals) qDebug() city;Qt的集合QStringList接口不是唯一的字符串列表。 QStringList是由QList 派生的。QList是眾多Qt容器模板類中的一個(gè)QLinkedList - 在中間快速插入,通過迭代器QVector - 使用連續(xù)內(nèi)存,緩慢插入
19、QStack LIFO, 后進(jìn)先出QQueue FIFO, 先進(jìn)先出QSet 唯一值QMap 關(guān)聯(lián)數(shù)組QHash 關(guān)聯(lián)數(shù)組,比QMap快,但需要哈希QMultiMap 通過每個(gè)鍵的多個(gè)值關(guān)聯(lián)數(shù)組QMultiHash 通過每個(gè)鍵的多個(gè)值關(guān)聯(lián)數(shù)組關(guān)聯(lián)到Qlist的快慢將是我們的參考和標(biāo)準(zhǔn)填充你可以用操作符填充一個(gè)QList函數(shù)prepend, insert 和append 也可以使用QList fibonacci;fibonacci 0 1 1 2 3 5 8;list.append(4);QList list;list.append(2);list.prepend(1);list.insert(
20、1,3);index 0: 2index 0: 2index 1: 4index 0: 1index 1: 2index 2: 3index 0: 2index 1: 3index 2: 4index 3: 4刪除使用removeFirst,removeAt,removeLast從Qlist中刪除列表項(xiàng)用takeFirst, takeAt, takeLast去得到一個(gè)列表項(xiàng)使用removeAll或removeOne刪除特定值的列表項(xiàng)while(list.length() list.removeFirst();QList widgets;widgets new QWidget new QWidg
21、et;while(widgets.length() delete widgets.takeFirst();QList list;list 1 2 3 1 2 3;list.removeAll(2); / Leaves 1, 3, 1, 3訪問一個(gè)QList 的索引范圍是0 -length-1單個(gè)列表項(xiàng)可以用at 或者 操作符來訪問。如果你能接受超出界限的情況,可以用value。 運(yùn)算符返回一個(gè)可修改的引用for(int i=0; ilist.length(); +i) listi+;for(int i=0; ilist.length(); +i) qDebug(At: %d, : %d, li
22、st.at(i), listi);for(int i=0; i100; +i) qDebug(“Value: %d, list.value(i);當(dāng)索引超出范圍時(shí)返回默認(rèn)構(gòu)造值迭代 - Java風(fēng)格Qt 支持 Java 風(fēng)格迭代器Java風(fēng)格的迭代器指向條目之間toFront把迭代器置于第一項(xiàng) 前面toBack把迭代器置于最后一 項(xiàng)后面用peekNext和peekPrevious參考列表項(xiàng)用 next 或 previous指向列表項(xiàng)item 1item 5item 4item 3item 2i.toBack()i.toFront()i.peekNext()i.next()i.peekPrevi
23、ous()i.previous()iQListIterator iter(list); while(iter.hasNext() qDebug(Item: %d, iter.next();如果需要修改列表項(xiàng),使用QMutableListIterator均返回一個(gè)值并邁向列表的下一個(gè)位置迭代 - STL的風(fēng)格Qt 支持 STL 風(fēng)格的迭代器STL的迭代器指向每個(gè)列表項(xiàng),并以此作為結(jié)束標(biāo)記無效項(xiàng)第一項(xiàng)用begin來返回結(jié)束標(biāo)志用end返回* 操作符關(guān)聯(lián)項(xiàng)的值 當(dāng)你向后遍歷訪問之前, 必須移動(dòng)操作符item 1item 5item 4item 3item 2begin()iend()end()*if
24、or(QList:ConstIterator iter=list.begin(); iter!=list.end(); +iter) qDebug(Item: %d, *iter);如果你需要修改列表項(xiàng),使用迭代器STL和Qt兩者的命名可以使用。Iterator|iterator和ConstIterator | const_iterator懶惰式的迭代遍歷整個(gè)集合,使用foreach警告!當(dāng)按值返回時(shí)要確保復(fù)制列表QStringList texts;foreach(QString text, texts) doSomething(text);QStringList texts;foreach(
25、const QString &text, texts) doSomething(text);const QList sizes = splitter-sizes();QList:const_iterator i;for(i=sizes.begin(); i!=sizes.end(); +i) processSize(*i);由于隱性共享,復(fù)制代價(jià)低廉使用常量的引用有助于提高性能。不使用它,仍然無法讓你改變列表的內(nèi)容與STL的交互QList 能與相應(yīng)的std:list相互轉(zhuǎn)換與STL的相互轉(zhuǎn)換意味著對(duì)列表內(nèi)容進(jìn)行深度復(fù)制 不存在隱含共享QList list;list 0 1 1 2 3 5 8
26、13;std:list stlList = list.toStdList();QList otherList = QList:fromStdList(stlList);從Qt 列表到STL列表從STL列表到 Qt 列表其他集合誰能代替QList,它們跟QList有何區(qū)別?QLinkedList用索引訪問緩慢使用迭代器很快快速恒定時(shí)間在列表的中間插入QVector使用連續(xù)的內(nèi)存空間插入和置首緩慢其他集合注意,攤銷行為amortized behavior是指在實(shí)時(shí)環(huán)境中不可預(yù)知的次數(shù)其他集合是以Qlist為根底的QStringListQStackQQueueQSetCollectionIndex
27、accessInsertPrependAppendQListO(1)O(n)Amort. O(1)Amort. O(1)QLinkedListO(n)O(1)O(1)O(1)QVectorO(1)O(n)O(n)Amort. O(1)特殊情況 - QStack堆,一個(gè)后進(jìn)先出LIFO的容器 后進(jìn)先出列表項(xiàng)壓入堆列表項(xiàng)彈出堆用top()取出頂項(xiàng)s.push()s.pop()QStack stack;stack.push(1);stack.push(2);stack.push(3);qDebug(Top: %d, stack.top(); / 3qDebug(Pop: %d, stack.pop(
28、); / 3qDebug(Pop: %d, stack.pop(); / 2qDebug(Pop: %d, stack.pop(); / 1qDebug(isEmpty? %s, stack.isEmpty()?yes:no);特殊情況- QQueue隊(duì)列,一個(gè)先進(jìn)先出 FIFO的 容器先進(jìn)先出項(xiàng)排隊(duì)進(jìn)入隊(duì)列項(xiàng)從隊(duì)列中出列取第一項(xiàng)可以用head()s.enqueue()s.dequeue()QQueue queue;queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);qDebug(Head: %d, queue.head(); / 1qDebu
29、g(Pop: %d, queue.dequeue(); / 1qDebug(Pop: %d, queue.dequeue(); / 2qDebug(Pop: %d, queue.dequeue(); / 3qDebug(isEmpty? %s, queue.isEmpty()?yes:no);特殊情況- QSet一個(gè)集合包含值,但對(duì)每個(gè)值只有一個(gè)實(shí)例。可以判斷一個(gè)值是否是集合的一局部也可以遍歷一個(gè)集合,看到所有的值可以轉(zhuǎn)換一個(gè)QList 到一個(gè)QSetQSet primes;primes 2 3 5 7 11 13;for(int i=1; i=10; +i) qDebug(%d is %sp
30、rime, i, primes.contains(i)?:not );foreach(int prime, primes) qDebug(Prime: %d, prime);QList list;list 1 1 2 2 2 3 3 5;QSet set = list.toSet();qDebug() list; / (1, 1, 2, 2, 2, 3, 3, 5)qDebug() set; / (1, 2, 3, 5)鍵 - 值集合QMap和QHash類讓你創(chuàng)立關(guān)聯(lián)數(shù)組QHash hash;hashHelsinki = 1310755;hashOslo = 1403268;hashCopen
31、hagen = 1892233;hashStockholm = 2021047;foreach(const QString &key, hash.keys() qDebug(%s, qPrintable(key);QMap map;mapHelsinki = 1310755;mapOslo = 1403268;mapCopenhagen = 1892233;mapStockholm = 2021047;foreach(const QString &key, map.keys() qDebug(%s, qPrintable(key);if(map.contains(Oslo) qDebug(Os
32、lo: %d, map.value(Oslo);使用QMap QMap 類需要操作符 來定義關(guān)鍵類型 此操作符用來保持鍵的順序填充使用運(yùn)算符或 insert來完成對(duì)于讀取,用value 結(jié)合containsif(map.contains(Oslo) qDebug(Oslo: %d, map.value(Oslo);qDebug(Berlin: %d, map.value(Berlin,42);mapStockholm = 2021047;map.insert(London, 13945000);可選默認(rèn)值。如果沒有指定一個(gè)默認(rèn)值將返回構(gòu)造值用 value 而不是 以避免誤增加項(xiàng)哈希QMap使用
33、了給定的模板中的類型的鍵QHash 使用 uint 值key類型散列到一個(gè)uint值運(yùn)用uint 值可能提高性能哈希值表示鍵沒有排序哈希函數(shù)必須設(shè)法防止碰撞,以到達(dá)良好的性能使用 QHash鍵類型必須提供一個(gè)qHash 函數(shù)和操作符= 到QHash相對(duì)Qmap,填充和讀取相同uint qHash(const Person &p) return p.age() + qHash(();bool operator=(const Person &first, const Person &second) return (() = () & (firs
34、t.age() = second.age();哈希函數(shù)應(yīng)該根據(jù)已知的啟發(fā)式優(yōu)化一鍵多值QMultiMap和QMultiHash提供支持一鍵多值的關(guān)聯(lián)數(shù)組QMultiMap multiMap;multiMap.insert(primes, 2);multiMap.insert(primes, 3);multiMap.insert(primes, 5); .multiMap.insert(fibonacci, 8);multiMap.insert(fibonacci, 13);foreach(const QString &key, multiMap.uniqueKeys() QList value
35、s = multiMap.values(key); QStringList temp; foreach(int value, values) temp QString:number(value); qDebug(%s: %s, qPrintable(key), qPrintable(temp.join(,);value 返回每個(gè)鍵的最后插入, values 返回鍵的所有值的列表keys 為每個(gè)值重復(fù)每個(gè)鍵,使用uniqueKeys一次獲取每個(gè)鍵沒有 , 用 insertQMap 和QHash 也支持這個(gè)使用insertMulti休息Qt的類型定義C + +中沒有定義嚴(yán)格跨平臺(tái)類型的大小size
36、of(int) = ?對(duì)于跨平臺(tái)的代碼,以嚴(yán)格的方式定義的所有類型是很重要的ARM = 4 bytesx86 = 4 bytesIA64 = 8 bytes.取決于CPU架構(gòu),操作系統(tǒng),編譯器等跨平臺(tái)類型TypeSizeMinimum valueMaximum valueuint81 byte0255uint162 bytes065 535uint324 bytes04 294 967 295uint648 bytes018 446 744 073 709 551 615int81 byte-128127int162 bytes-32 76832 767int324 bytes-2 147 4
37、83 6482 147 483 647int648 bytes-9 223 372 036 854 775 8089 223 372 036 854 775 807quintptr“pointer sized”n/an/aqptrdiff“pointer sized”n/an/aqrealfast real valuesn/an/a所有類型都定義在頭中Qt的復(fù)雜類型Qt提供了多個(gè)復(fù)雜的類和類型QColorQBrushQRectQPointQStringQSizeQListQImageQByteArrayQPixmapQPenQFontQVariant有時(shí)候,希望能夠通過一個(gè)普通的接口返回任何類
38、型QVariant類可以被視為一個(gè)聯(lián)合創(chuàng)造一個(gè)Qt的類型聯(lián)合是不可能,因?yàn)槁?lián)合需要默認(rèn)的構(gòu)造函數(shù)變異類可以包含自定義的復(fù)雜類型,例如QColor屬于QtGui,QVariant屬于QtCore 一旦它們被聲明,聯(lián)合就不能擴(kuò)展到更多類型const QVariant &data(int index);void setData(const QVariant &data, int index);數(shù)據(jù)可以是一個(gè)字符串,圖片,顏色,畫刷一個(gè)整數(shù)值,等使用QVariant根本類型用構(gòu)造函數(shù)和 toType 函數(shù)處理非QtCore類型,如自定義類型,使用setValue 函數(shù)和模板 value 函數(shù)來處理QV
39、ariant v;QColor c(Qt:red);qDebug() Before: c; / Before: QColor(ARGB 1, 1, 0, 0) v.setValue(c);c = v.value(); / After: QColor(ARGB 1, 1, 0, 0) qDebug() After: c;QVariant v;int i = 42;qDebug() Before: i; / Before: 42v = i;i = v.toInt();qDebug() After: = 0);不必是一個(gè)QObject.QVariant與Person對(duì)象試圖通過一個(gè)QVariant對(duì)
40、象傳遞一個(gè)Person對(duì)象失敗在元類型系統(tǒng)中聲明這一類型解決了問題class Person .;Q_DECLARE_METATYPE(Person)#endif / PERSON_Hqmetatype.h:200: error: qt_metatype_id is not a member of QMetaTypeIdQVariant與Person對(duì)象當(dāng)類型注冊(cè)成為一個(gè)元類型, Qt能把它存儲(chǔ)在一個(gè)Qvariant中要求聲明類型Public default constructorPublic copy constructorPublic destructorQVariant var;var.s
41、etValue(Person(Ole, 42);Person p = var.value();qDebug(%s, %d, qPrintable((), p.age();然后,它中斷了.當(dāng)與信號(hào)和槽工作,大局部連接是直接的直接連接時(shí),類型可工作排隊(duì)的連接,即非阻塞,異步的時(shí)候,這些類型不能工作比方跨越線程邊界connect(src, SIGNAL(), dest, SLOT(), Qt:QueuedConnection);.QObject:connect: Cannot queue arguments of type Person(Make sure Person is regis
42、tered using qRegisterMetaType().)運(yùn)行時(shí)的錯(cuò)誤信息注冊(cè)類型錯(cuò)誤信息告訴我們?nèi)绾谓鉀Q問題qRegisterMetaType函數(shù)必須在連接建立之前被調(diào)用 (通常從main開始)int main(int argc, char *argv) qRegisterMetaType(); .文件和文件系統(tǒng)在跨平臺(tái)中的文件和目錄帶來許多問題系統(tǒng)是否有驅(qū)動(dòng)器,或只是一個(gè)根?路徑是否被“/ 或 “隔開?系統(tǒng)在哪里存儲(chǔ)臨時(shí)文件?用戶在哪里存儲(chǔ)文檔?應(yīng)用程序在哪里存儲(chǔ)?路徑用QDir 類去處理路徑學(xué)會(huì)用靜態(tài)函數(shù)去初始化QDir d = QDir:root(); / C:/ on win
43、dowsQDir:current() / Current directoryQDir:home() / Home directoryQDir:temp() / Temporary directory/ Executable directory pathQDir(QApplication:applicationDirPath()QDir d = QDir(C:);找目錄內(nèi)容entryInfoList返回該目錄內(nèi)容的信息列表你可以添加過濾器以跳過文件或目錄QFientryInfoListleInfoList infos = QDir:root().entryInfoList();foreach(c
44、onst QFileInfo &info, infos) qDebug(%s, qPrintable(info.fileName();QDir:DirsQDir:FilesQDir:NoSymLinksQDir:ReadableQDir:WritableQDir:ExecutableQDir:HiddenQDir:System以任意順序列出文件和目錄隱藏文件?系統(tǒng)文件?哪個(gè)文件?目錄,文件或符號(hào)鏈接?找目錄內(nèi)容QDir:NameQDir:TimeQDir:SizeQDir:TypeQDir:DirsFirstQDir:DirsLastQDir:ReversedQFileInfoList inf
45、os = QDir:root().entryInfoList(QDir:Dirs, QDir:Name);foreach(const QFileInfo &info, infos) qDebug(%s, qPrintable(info.fileName();過濾器順序排序方法 .目錄在文件的前面還是后面倒序你也可以指定排序順序從主目錄根據(jù)名字排列所有目錄找目錄內(nèi)容最后,可以添加名字過濾器QFileInfoList infos = dir.entryInfoList(QStringList() *.cpp *.h, QDir:Files, QDir:Name);foreach(const QFi
46、leInfo &info, infos) qDebug(%s, qPrintable(info.fileName();所有cpp文件和頭文件QFileInfo每個(gè) QFileInfo 對(duì)象都有許多函數(shù)absoluteFilePath 某項(xiàng)的完整路徑isDir / isFile / isRoot 項(xiàng)的類型isWriteable / isReadable / isExecutable 文件的權(quán)限fileNameabsolutePathpathbaseNamecompleteSuffixsuffix當(dāng)遍歷時(shí),有利于建立新的Qdir對(duì)象翻開和讀取文件QFile 用來訪問文件QFile f(/home/
47、john/input.txt);if (!f.open(QIODevice:ReadOnly) qFatal(Could not open file);while(!f.atEnd() QByteArray data = f.read(160); processData(data);QByteArray data = f.readAll();processData(data);f.close();每次讀取160字節(jié)一次性讀取所有文件寫文件QFile f(/home/john/input.txt); if (!f.open(QIODevice:WriteOnly) qFatal(Could no
48、t open file);QByteArray data = createData(); f.write(data); f.close();寫入文件時(shí),用WriteOnly 模式翻開文件,用寫函數(shù)向文件添加數(shù)據(jù)文件也可用ReadWrite 模式翻開Append或Truncate標(biāo)志可以與寫入模式相結(jié)合以追加數(shù)據(jù)到文件或截?cái)嗨慈コ募郧暗膬?nèi)容if (!f.open(QIODevice:WriteOnly|QIODevice:Append)QIODeviceQFile由QIODevice派生構(gòu)造函數(shù)QTextStream和QDataStream以QIODevice指針為參數(shù),而不是QFile指
49、針QIODevice的實(shí)現(xiàn)QBuffer 讀寫到內(nèi)存緩沖 區(qū)QextSerialPort 串行(RS232) 通訊 (第三方)QAbstractSocket - TCP,SSL和UDP套接字類的基QProcess 讀寫進(jìn)程的標(biāo)準(zhǔn)輸入和輸出流操作與文件讀取和寫入函數(shù)在許多情況下顯得為難 如處理復(fù)雜類型等一個(gè)現(xiàn)代的方案是使用流操作Qt的提供兩種流操作用于處理文本文件用于處理二進(jìn)制文件格式QTextStreamQTextStream 類處理基于文本的文件讀寫這個(gè)類能感知編解碼默認(rèn)是使用區(qū)域設(shè)置,但也可以顯式設(shè)置 感知行和字感知數(shù)字Results in:寫入文本流使用操作符 和修飾符, 跟使用 STL 的流類似 QFile f(.);if(!f.open(QIODevice:WriteOnly) qFatal(Could not
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度二手房買賣糾紛解決協(xié)議3篇
- 二零二五年度城市軌道交通工期延期補(bǔ)充協(xié)議書3篇
- 2025年度智慧停車入駐合作協(xié)議4篇
- 二零二五年度臨時(shí)用工社會(huì)保險(xiǎn)繳納與代繳服務(wù)合同3篇
- 二零二五版商業(yè)地產(chǎn)買賣合同4篇
- 2025年度產(chǎn)業(yè)園區(qū)數(shù)據(jù)中心租賃服務(wù)合同4篇
- 2025年度林木采伐安全與生態(tài)補(bǔ)償基金管理協(xié)議4篇
- 二零二五年度智慧倉儲(chǔ)租賃服務(wù)協(xié)議書3篇
- 2024酒店照明設(shè)計(jì)裝修合同
- 個(gè)人租用公司車輛2024年度協(xié)議模板版A版
- 員工宿舍用電安全培訓(xùn)
- 家庭年度盤點(diǎn)模板
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級(jí)認(rèn)證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國電子學(xué)會(huì)青少年軟件編程等級(jí)考試標(biāo)準(zhǔn)python三級(jí)練習(xí)
- 公益慈善機(jī)構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報(bào)告
- 飼料廠現(xiàn)場管理類隱患排查治理清單
- 【名著閱讀】《紅巖》30題(附答案解析)
- Starter Unit 2 同步練習(xí)人教版2024七年級(jí)英語上冊(cè)
- 分?jǐn)?shù)的加法、減法、乘法和除法運(yùn)算規(guī)律
- 2024年江蘇鑫財(cái)國有資產(chǎn)運(yùn)營有限公司招聘筆試沖刺題(帶答案解析)
評(píng)論
0/150
提交評(píng)論