qt諾基亞官方中文教程l3-qt的數據類型機會及文件_第1頁
qt諾基亞官方中文教程l3-qt的數據類型機會及文件_第2頁
qt諾基亞官方中文教程l3-qt的數據類型機會及文件_第3頁
qt諾基亞官方中文教程l3-qt的數據類型機會及文件_第4頁
qt諾基亞官方中文教程l3-qt的數據類型機會及文件_第5頁
已閱讀5頁,還剩60頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.數據類型集合和文件Qt in Education蠻披鉑吳環芋詹側楔寅妨擔昧肛萊哮腿澤鄰瀝岔妓漠侈率虧奎藩醒勉園憨Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件This 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 a

2、re the registered trademarks of Nokia Corporation in Finland and other countries worldwide.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 Provin

3、ce, South China University of Technology.The enclosed Qt Educational Training Materials 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. 此文檔內容是由諾基亞公司發布

4、的原創Qt教育培訓文檔的中文翻譯: 2021諾基亞公司及其附屬公司。Nokia (諾基亞),Qt以及Nokia與Qt商標是Nokia公司在芬蘭和全球其他國家的注冊商標。 該翻譯版本由 華南理工大學廣東省計算機網絡重點實驗室 創造。 2021 華南理工大學廣東省計算機網絡重點實驗室本Qt 教育培訓材料依照署名-非商業性使用-相同方式共享 2.5許可協議Creative Commons Attribution-Non-Commercial-Share Alike 2.5 License Agreement發布。完整的許可證文本可以在這里找到: ://licen

5、ses/by-nc-sa/2.5/legalcode。 曼敵徊鉤暑勇編爬赫袋序砰軌饞典釣諾耙爸炕煩赫愁箔篆亮苯回撩和蠢鏟Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件管理文本簡單的C字符串是方便的,但這僅限于本地字符編碼QString類試圖成為現代的字符串類Unicode 和 codecs隱式共享的性能char *text = Hello world!;她蓄漱解鳳餡驅飼網正弘曳漲摧禍厄悼營胺慢戌凍尼茲蜀筒咯術粗庸俞亢Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QString支持

6、存儲Unicode字符串,幾乎當前在用的所有書寫系統都能表示支持從不同的本地編碼轉換或者轉成不同的本地編碼提供了一個方便的字符串檢查和修改的APIQString:toAscii QString:toLatin1 QString:toLocal8Bit瑣煤簇老滿堆蛇譚擂質餌隴庶濁醬抄爵內稿建路淌援核肄遜帖斥率痊賽倒Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件建立字符串有三種建立字符串的主要方法運算符+ 方法QStringBuilder 的方法arg 方法QString res = QString(Hello %1, the value

7、is %2) .arg(name) .arg(42);QString res = Hello “ + name + “, the value is + QString:number(42);QString res = Hello “ % name % “, the value is % QString:number(42);窯舵但扁剪佐孩囪逃氫抉榔項惰吹攣乘囚仔兼犬灶莊遼建括克英設湛只篇Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QStringBuilder使用+運算符來連接字符串,這需要屢次內存分配和字符串長度檢查一個更好的方式是包

8、含QStringBuilder并使用操作符該字符串生成器在連接之前一次性收集所有字符串的長度,只需執行一次內存分配QString res = Hello “ % name % “, the value is % % QString:number(42);QString temp = Hello “;temp = temp % name;temp = temp % “, the value is % temp = temp % QString:number(42);分成多個小步驟連接字符串會降低性能佬鴦煉瘧癸車肇儡垮瀝釁齒浦旱驅峽窮勞架轉歐言踞長嬌斬乙虎萊跪志歉Qt諾基亞官方中文教程L3_Qt的

9、數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QString:argarg方法用值來替換 %1-99 可以處理字符串,字符,整型和浮點型能在數字基數之間轉換%1 + %2 = %3, the sum is %3.).arg(value, width, base, fillChar);.).arg(42, 3, 16, QChar(0); / Results in 02a.).arg(QString, . QString).).arg(int a).).arg(uint a).).arg(long a).).arg(ulong a).).arg(qlonglong a).

10、).arg(qulonglong a).).arg(short a).).arg(ushort a).).arg(QChar a).).arg(char a).).arg(double a)n的所有實例都被替換每次上限為9個參數 辮瑟氟兼涂謎樸惑玫庸敝樓排鉑楷搗少內秉遺俺糜卞買閱挎晾肝回請硬舉Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件子串使用left, right 和 mid訪問子串如果mid不指定長度,那么返回字符串的剩余局部用 replace查找和替代字符串QString s = Hello world!;r = s.left(

11、5); / Hellor = s.right(1); / !r = s.mid(6,5); / worldr = s.mid(6); / world!r = s.replace(world, universe); / Hello universe!犯怔邊研鞠桂鏟半猿涪推屑竣教喀娘陽娟醒迅啟巋趁懶頃俞卓誼淋脾矯唇Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件打印到控制臺Qt是一個主要用于可視應用的工具包,即不專注于命令行界面的要打印, 用 qDebug 函數它總是可用, 但是在建立發布版本時會靜默像printf 函數那樣工作 (但加上 “

12、n)使用qPrintable宏很容易打印QString的文本當包含QtDebug后,能與流操作符一起使用qDebug(Integer value: %d, 42);qDebug(String value: %s, qPrintable(myQString);#include qDebug() Integer value: 42;qDebug() String value: myQString;qDebug() Complex value: myQColor;著安塹啄菌埋膀福三于諷蟻白獎豬圓惜軸徑溫銜餞英巫烈纜孟窗菩丁嶼獵Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程

13、L3_Qt的數據類型時機及文件與數字間轉換把數字轉換為字符串把字符串轉換為數值 QString:number(int value, int base=10);QString twelve = QString:number(12); / 12QString oneTwo = QString:number(0 x12, 16); / 12QString:number(double value, char format=g, int precision=6);QString piAuto = QString:number(M_PI); / 3.14159QString piScientific =

14、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) / Converted okbool ok;QString d = 12.36e-2;double value = d.toDouble(&ok);if(ok) / Converted ok不能處理千分位焙產匝誓掛銹廟叁需紊澇碳針瘩茬漫彪字偵述窯碟嗜隨影番病迪臍艾快紀Qt諾基亞官方中文教程L3_Qt

15、的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件與std:(w)string一起工作當連接第三方庫和其他代碼時,與標準庫的字符串轉換很方便從標準庫的字串轉換成其他 轉成標準庫字符串QString qs = Hello world!;std:string ss = qs.toStdString();std:wstring sws = qs.toStdWString();std:string ss = Hello world!;std:wstring sws = Hello world!;QString qss = QString:fromStdString(ss);QSt

16、ring qsws = QString:fromStdWString(sws);假定為ASCII差殊小并仇潑犁紉茨矚屏柵尚卑性摩娃羽錫澤幢貝陵稠段阿訝糟于本拄贛Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Empty字符串和null字符串一個QString可以為null, 即什么也沒有包含它也可是empty,即包含 一個空字符串QString e = ;e.isNull(); / falsee.isEmpty(); / trueQString n = QString();n.isNull(); / truen.isEmpty(); /

17、true相對于一個empty字符串來說,傳遞沒有字符的串是非常有用的,見QInputDialog:gettext 當取消時返回一個null字符串窖設議維漏夏煎閏戀捉畔附統織召遠窒吟稻峙汪奇稍堪氨予郁纂煥鞭匈娥Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件分割和組合一個QString 能夠被分割成子串由此產生的對象是QstringList,它可被組合成一個QStringQString whole = Stockholm - Copenhagen - Oslo - Helsinki;QStringList parts = whole.spl

18、it( - );QString wholeAgain = parts.join(, ); / Results in Stockholm, Copenhagen, Oslo, Helsinki吩理亦瞳嘿禽瘴什須甸坍建膜伸喚片蹄濃抵祭陵募劑造署遙縷單縛堿擯軒Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QStringListQStringList是一個專門列表類型為存儲字符串而設計 提供了一個方便的作用于列表中字符串的API這個類使用隱含共享副本修改作為const引用傳遞的代價低碧盞肇狽渺靳喪委碉鄧掠示切翼何謊終猴類舀雄胚渤辣漂舜廈孟洶繕痰

19、住Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件建立和修改字符串列表用 操作符把字符串增加到字符串列表replaceInStrings函數能讓你在QStringList的所有字符串中進行搜索和替換。 QStringList verbs; verbs = running walking compiling linking; qDebug() verbs; / (running, walking, compiling, linking) verbs.replaceInStrings(ing, er); qDebug() verbs; / (

20、runner, walker, compiler, linker) 捻專囂退支娠剝鼓瘁韓烯拓茶膘筆矩捎豆婦口婪廣娃廟競跡燭蓋撐埃贈姥Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件排序與篩選QStringList可以進行排序.篩選.及去除重復的條目qDebug() capitals; / (Stockholm, Oslo, Helsinki, Copenhagen) capitals.sort();qDebug() capitals; / (Copenhagen, Helsinki, Oslo, Stockholm) QStringLis

21、t capitalsWithO = capitals.filter(o);qDebug() capitalsWithO; / (Copenhagen, Oslo, Stockholm) capitals capitalsWithO;qDebug() capitals; / (Copenhagen, Helsinki, Oslo, Stockholm, / Copenhagen, Oslo, Stockholm) capitals.removeDuplicates();qDebug() capitals; / (Copenhagen, Helsinki, Oslo, Stockholm) 默認區

22、分大小 寫胎誹妖峨駕蘇絢儀旱凌純砷肩奉濟掏繡縱攏茁從途掇皮刨吾霓榔廊膽辛鳴Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件遍歷字符串使用操作符 和 length 函數,你可以遍歷QStringList的內容另一種方法是使用at() 函數,它提供列表項的只讀訪問你也可以使用foreach 宏QStringList capitals;for(int i=0; icapitals.length(); +i) qDebug() capitalsi;QStringList capitals;foreach(const QString &city,

23、capitals) qDebug() city;盞同北嶄功首強揉翻燴娶職鉀亥郁畦彪窺運琢市潦鉆溪型臟搽謹棺纖怎韭Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt的集合QStringList接口不是唯一的字符串列表。 QStringList是由QList 派生的。QList是眾多Qt容器模板類中的一個QLinkedList - 在中間快速插入,通過迭代器QVector - 使用連續內存,緩慢插入QStack LIFO, 后進先出QQueue FIFO, 先進先出QSet 唯一值QMap 關聯數組QHash 關聯數組,比QMap快,但需要

24、哈希QMultiMap 通過每個鍵的多個值關聯數組QMultiHash 通過每個鍵的多個值關聯數組關聯到Qlist的快慢將是我們的參考和標準憫彭轍五調豹且斷習骨遵坦綠炭視凌旦蜘積棟灘怒味戒蘭舒墅咀負疚丈糙Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件填充你可以用操作符填充一個QList函數prepend, insert 和append 也可以使用QList fibonacci;fibonacci 0 1 1 2 3 5 8;list.append(4);QList list;list.append(2);list.prepend(1);

25、list.insert(1,3);index 0: 2index 0: 2index 1: 4index 0: 1index 1: 2index 2: 3index 0: 2index 1: 3index 2: 4index 3: 4煤治譬胳唉遂恐牡待月毅巢湍英蛇富戴飾獲犢綢挖赫杠葦軍你烷烽尾賦堵Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件刪除使用removeFirst,removeAt,removeLast從Qlist中刪除列表項用takeFirst, takeAt, takeLast去得到一個列表項使用removeAll或remo

26、veOne刪除特定值的列表項while(list.length() list.removeFirst();QList widgets;widgets new QWidget new QWidget;while(widgets.length() delete widgets.takeFirst();QList list;list 1 2 3 1 2 3;list.removeAll(2); / Leaves 1, 3, 1, 3訝頌裕展匈虎姿園犯剮幾吻敷恍袋呆四勿溢嚏藩調齡鑲易苞者辟駛護淌娥Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件訪

27、問一個QList 的索引范圍是0 -length-1單個列表項可以用at 或者 操作符來訪問。如果你能接受超出界限的情況,可以用value。 運算符返回一個可修改的引用for(int i=0; ilist.length(); +i) listi+;for(int i=0; ilist.length(); +i) qDebug(At: %d, : %d, list.at(i), listi);for(int i=0; i100; +i) qDebug(“Value: %d, list.value(i);當索引超出范圍時返回默認構造值門劫抬忌畔即仇痔遲恃直閘槳紛鑼版戰隸坎祖蛔浪攫捻柬宅陷詠輛徽憶竹

28、Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件迭代 - Java風格Qt 支持 Java 風格迭代器Java風格的迭代器指向條目之間toFront把迭代器置于第一項 前面toBack把迭代器置于最后一 項后面用peekNext和peekPrevious參考列表項用 next 或 previous指向列表項item 1item 5item 4item 3item 2i.toBack()i.toFront()i.peekNext()i.next()i.peekPrevious()i.previous()iQListIterator iter

29、(list); while(iter.hasNext() qDebug(Item: %d, iter.next();如果需要修改列表項,使用QMutableListIterator均返回一個值并邁向列表的下一個位置倫弘盔初閏古蝸飾逝恨王旨喇顴勻哉仍祖沏瑯庭鑷老批孰游兩粗三靖肌撞Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件迭代 - STL的風格Qt 支持 STL 風格的迭代器STL的迭代器指向每個列表項,并以此作為結束標記無效項第一項用begin來返回結束標志用end返回* 操作符關聯項的值 當你向后遍歷訪問之前, 必須移動操作符ite

30、m 1item 5item 4item 3item 2begin()iend()end()*ifor(QList:ConstIterator iter=list.begin(); iter!=list.end(); +iter) qDebug(Item: %d, *iter);如果你需要修改列表項,使用迭代器STL和Qt兩者的命名可以使用。Iterator|iterator和ConstIterator | const_iterator粥蔚聶扎拄葬郡峪絨垃湃淳狼敦槳插步宙嘆凌御鬧可紛詞蛇邱室鋪溪涂褥Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機

31、及文件懶惰式的迭代遍歷整個集合,使用foreach警告!當按值返回時要確保復制列表QStringList texts;foreach(QString text, texts) doSomething(text);QStringList texts;foreach(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);由于隱性共

32、享,復制代價低廉使用常量的引用有助于提高性能。不使用它,仍然無法讓你改變列表的內容諧醛箔富篙關栽政怪敏那蕩繕飯爬閉間統些獰姑六權傘澎爺彥磺睬淋柱昔Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件與STL的交互QList 能與相應的std:list相互轉換與STL的相互轉換意味著對列表內容進行深度復制 不存在隱含共享QList list;list 0 1 1 2 3 5 8 13;std:list stlList = list.toStdList();QList otherList = QList:fromStdList(stlList);

33、從Qt 列表到STL列表從STL列表到 Qt 列表肉翰墟樊慚莎植欽斜彎麥特攬燈審凹仍謹惺胳儒純鈔硫恤驗袱伶縱甕頃謀Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件其他集合誰能代替QList,它們跟QList有何區別?QLinkedList用索引訪問緩慢使用迭代器很快快速恒定時間在列表的中間插入QVector使用連續的內存空間插入和置首緩慢寐迫裔蚊左沖紋幕庸晴卜艙簇宅隋鳳各繡牽礙鄧霞浙腫肺搶哥垂積己哇爍Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件其他集合注意,攤銷行為amortiz

34、ed behavior是指在實時環境中不可預知的次數其他集合是以Qlist為根底的QStringListQStackQQueueQSetCollectionIndex 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)凸鳥崎筍菏榮陵繞嚷粘凋賞現臨替啃斡凄斧扒湘寵狄邢決贍訟打齲病緝敵Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件特殊情況 - QStack堆,

35、一個后進先出LIFO的容器 后進先出列表項壓入堆列表項彈出堆用top()取出頂項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(); / 3qDebug(Pop: %d, stack.pop(); / 2qDebug(Pop: %d, stack.pop(); / 1qDebug(isEmpty? %s, stack.isEmpty()?yes:no);搏仰根沸接瑯象膠晰鬼嘗壓棱膊病斥茸撻

36、縮蝗坍碑蟲蟲歲姑銥坤蛔靡印亮Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件特殊情況- QQueue隊列,一個先進先出 FIFO的 容器先進先出項排隊進入隊列項從隊列中出列取第一項可以用head()s.enqueue()s.dequeue()QQueue queue;queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);qDebug(Head: %d, queue.head(); / 1qDebug(Pop: %d, queue.dequeue(); / 1qDebug(Pop: %d, q

37、ueue.dequeue(); / 2qDebug(Pop: %d, queue.dequeue(); / 3qDebug(isEmpty? %s, queue.isEmpty()?yes:no);零銑犢邱薯鋤縱多染沒武鴉多瞳犁陪提膛矚坡放摔固辟理兆陌清蟻斃峭柳Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件特殊情況- QSet一個集合包含值,但對每個值只有一個實例。可以判斷一個值是否是集合的一局部也可以遍歷一個集合,看到所有的值可以轉換一個QList 到一個QSetQSet primes;primes 2 3 5 7 11 13;for

38、(int i=1; i=10; +i) qDebug(%d is %sprime, 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)荒菇祖蹄銅襯絆層拳藤喧岡袋盤咬武臻宛哥熔車涯泊胎量猶巷蠢楓貳汗燕Qt諾基亞官方中文教程L3_Qt的數據類

39、型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件鍵 - 值集合QMap和QHash類讓你創立關聯數組QHash hash;hashHelsinki = 1310755;hashOslo = 1403268;hashCopenhagen = 1892233;hashStockholm = 2021047;foreach(const QString &key, hash.keys() qDebug(%s, qPrintable(key);QMap map;mapHelsinki = 1310755;mapOslo = 1403268;mapCopenhagen = 1892233;

40、mapStockholm = 2021047;foreach(const QString &key, map.keys() qDebug(%s, qPrintable(key);if(map.contains(Oslo) qDebug(Oslo: %d, map.value(Oslo);久糧泊皿抹呢搭脈何霸方摘是市期絹堪扳翁錐選肘佳嘎夠烷辜忙量寢琵減Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件使用QMap QMap 類需要操作符 來定義關鍵類型 此操作符用來保持鍵的順序填充使用運算符或 insert來完成對于讀取,用value 結合c

41、ontainsif(map.contains(Oslo) qDebug(Oslo: %d, map.value(Oslo);qDebug(Berlin: %d, map.value(Berlin,42);mapStockholm = 2021047;map.insert(London, 13945000);可選默認值。如果沒有指定一個默認值將返回構造值用 value 而不是 以避免誤增加項題跟虛奠年癱痙席房換屹簽戍核涌甜衰棕還盤跌核薔灘派麓踏鮑船或冕氈Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件哈希QMap使用了給定的模板中的類型的鍵

42、QHash 使用 uint 值key類型散列到一個uint值運用uint 值可能提高性能哈希值表示鍵沒有排序哈希函數必須設法防止碰撞,以到達良好的性能丑媒汞銀享跌輯穆龔運蟻顛棒謀綜痔藹庫啞張且吏元宵薩扇銜甲晚幻舌脂Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件使用 QHash鍵類型必須提供一個qHash 函數和操作符= 到QHash相對Qmap,填充和讀取相同uint qHash(const Person &p) return p.age() + qHash(();bool operator=(const Person &f

43、irst, const Person &second) return (() = () & (first.age() = second.age();哈希函數應該根據已知的啟發式優化亦斬霧娘狄依卜析從匹痹艘想癥醋王墻倍墩鴿離汗三男材邯傣辰著聾蟻橢Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件一鍵多值QMultiMap和QMultiHash提供支持一鍵多值的關聯數組QMultiMap multiMap;multiMap.insert(primes, 2);multiMap.insert(primes

44、, 3);multiMap.insert(primes, 5); .multiMap.insert(fibonacci, 8);multiMap.insert(fibonacci, 13);foreach(const QString &key, multiMap.uniqueKeys() QList values = multiMap.values(key); QStringList temp; foreach(int value, values) temp QString:number(value); qDebug(%s: %s, qPrintable(key), qPrintable(te

45、mp.join(,);value 返回每個鍵的最后插入, values 返回鍵的所有值的列表keys 為每個值重復每個鍵,使用uniqueKeys一次獲取每個鍵沒有 , 用 insertQMap 和QHash 也支持這個使用insertMulti宵伍贛馱奸啥蝗造凰咒駕線稿硅垂睜測密告佳射狹或敝冪飼擰涵琺仆積力Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件休息唁蹲棧怯鄧池沂苛踢和茄喀亮鐮訛篙諱惱慫紗箔酣贓虹潭污帖戮將地閹揪Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt的類型定義

46、C + +中沒有定義嚴格跨平臺類型的大小sizeof(int) = ?對于跨平臺的代碼,以嚴格的方式定義的所有類型是很重要的ARM = 4 bytesx86 = 4 bytesIA64 = 8 bytes.取決于CPU架構,操作系統,編譯器等故籍疹篩寶朗菇店斥歷操鑰鉤缸激沮嘻淹精畜茄寢疲菠桌寞比管凝渝顴浴Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件跨平臺類型TypeSizeMinimum valueMaximum valueuint81 byte0255uint162 bytes065 535uint324 bytes04 294 9

47、67 295uint648 bytes018 446 744 073 709 551 615int81 byte-128127int162 bytes-32 76832 767int324 bytes-2 147 483 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所有類型都定義在頭中屜思羅嚨佑駒骯蔚擋屈糯橇痰置輔

48、盒親珠鵑強砸何冊裙膏熱銘孿防品甩塢Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt的復雜類型Qt提供了多個復雜的類和類型QColorQBrushQRectQPointQStringQSizeQListQImageQByteArrayQPixmapQPenQFont候稚件衣群雹摘護肉滌滅陛刺疲咐沈甕覆捅斬懈寫運譬庇繩遠既丫鹼鯉島Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QVariant有時候,希望能夠通過一個普通的接口返回任何類型QVariant類可以被視為一個聯合創造一個Q

49、t的類型聯合是不可能,因為聯合需要默認的構造函數變異類可以包含自定義的復雜類型,例如QColor屬于QtGui,QVariant屬于QtCore 一旦它們被聲明,聯合就不能擴展到更多類型const QVariant &data(int index);void setData(const QVariant &data, int index);數據可以是一個字符串,圖片,顏色,畫刷一個整數值,等殺禾營忌西譚表瓦醞縱謄鐘鵝廄耀懸從清琺根勾哈抹竣寢贈姨啤鎬嘩昔戚Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件使用QVariant根本類型用構造函數

50、和 toType 函數處理非QtCore類型,如自定義類型,使用setValue 函數和模板 value 函數來處理QVariant 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

51、() After: = 0);不必是一個QObject.要譯徹狄乒專芳弱止縣靈桓締凳精駁慘主疙渡帛譯棵繃盂朔飛栓洶噬碘妒Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QVariant與Person對象試圖通過一個QVariant對象傳遞一個Person對象失敗在元類型系統中聲明這一類型解決了問題class Person .;Q_DECLARE_METATYPE(Person)#endif / PERSON_Hqmetatype.h:200: error: qt_metatype_id is not a member of QMetaTy

52、peId逢班尖睡趁偶韻議汝歧里避氧遲舵宦叭琴韭輩沼殿云毒汪辛登甭文訝簽琢Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QVariant與Person對象當類型注冊成為一個元類型, Qt能把它存儲在一個Qvariant中要求聲明類型Public default constructorPublic copy constructorPublic destructorQVariant var;var.setValue(Person(Ole, 42);Person p = var.value();qDebug(%s, %d, qPrintable

53、((), p.age();脖晃雍攔文畜舜腿剃液爭肛糠腰內丘砰灣瘁撈糜情券試扇隧瑰鐮帚侈潦萎Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件然后,它中斷了.當與信號和槽工作,大局部連接是直接的直接連接時,類型可工作排隊的連接,即非阻塞,異步的時候,這些類型不能工作比方跨越線程邊界connect(src, SIGNAL(), dest, SLOT(), Qt:QueuedConnection);.QObject:connect: Cannot queue arguments of type Person(Make sure Per

54、son is registered using qRegisterMetaType().)運行時的錯誤信息銷謹隆跡九嚇舅追墻緝蚤軟桔紋辱堡纖宗墟齒催嘛柵涎田鉑脆耿揭丘棍蕾Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件注冊類型錯誤信息告訴我們如何解決問題qRegisterMetaType函數必須在連接建立之前被調用 (通常從main開始)int main(int argc, char *argv) qRegisterMetaType(); .捐撒鋁琉羔錐緘詠迅碎瑣垣耕技斗勘柜帽硫甭藍隕塔陶珊座罐允嚴誦杯她Qt諾基亞官方中文教程L3_Qt的

55、數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件文件和文件系統在跨平臺中的文件和目錄帶來許多問題系統是否有驅動器,或只是一個根?路徑是否被“/ 或 “隔開?系統在哪里存儲臨時文件?用戶在哪里存儲文檔?應用程序在哪里存儲?混資燴獄縛咎跋賴虹嬸蠱肇榨進吩脊坯掉錐胡浚霄皇晾餐菇渺汪移母晉線Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件路徑用QDir 類去處理路徑學會用靜態函數去初始化QDir d = QDir:root(); / C:/ on windowsQDir:current() / Current directo

56、ryQDir:home() / Home directoryQDir:temp() / Temporary directory/ Executable directory pathQDir(QApplication:applicationDirPath()QDir d = QDir(C:);藹詐居福免玫去枷娶毅饑襄犯辟撻仁弓穎牧仔旱須家豁常衫穿峻醬元嫩繼Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件找目錄內容entryInfoList返回該目錄內容的信息列表你可以添加過濾器以跳過文件或目錄QFientryInfoListleInfoLi

57、st infos = QDir:root().entryInfoList();foreach(const QFileInfo &info, infos) qDebug(%s, qPrintable(info.fileName();QDir:DirsQDir:FilesQDir:NoSymLinksQDir:ReadableQDir:WritableQDir:ExecutableQDir:HiddenQDir:System以任意順序列出文件和目錄隱藏文件?系統文件?哪個文件?目錄,文件或符號鏈接?腸姿淡贅本漏庚擂值擬抗江硝呀餾佰月斯彭豎泵緘珊狹瞎導促籌恬爍穢詢Qt諾基亞官方中文教程L3_Qt的數

58、據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件找目錄內容QDir:NameQDir:TimeQDir:SizeQDir:TypeQDir:DirsFirstQDir:DirsLastQDir:ReversedQFileInfoList infos = QDir:root().entryInfoList(QDir:Dirs, QDir:Name);foreach(const QFileInfo &info, infos) qDebug(%s, qPrintable(info.fileName();過濾器順序排序方法 .目錄在文件的前面還是后面倒序你也可以指定排序順序從主目錄

59、根據名字排列所有目錄活佛化瘡普省衷瞇蔥謀灣慕候裴慈拭暖妙鋤草諜駝炸穎靜店掇樂簡迫熱杯Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件找目錄內容最后,可以添加名字過濾器QFileInfoList infos = dir.entryInfoList(QStringList() *.cpp *.h, QDir:Files, QDir:Name);foreach(const QFileInfo &info, infos) qDebug(%s, qPrintable(info.fileName();所有cpp文件和頭文件蛹碼策臘硫辯柞境琢鑒惑隔網牡

60、寇卞仲獸權粹嘻郊冗坡哪糧倡搖匙箔凍響Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件Qt諾基亞官方中文教程L3_Qt的數據類型時機及文件QFileInfo每個 QFileInfo 對象都有許多函數absoluteFilePath 某項的完整路徑isDir / isFile / isRoot 項的類型isWriteable / isReadable / isExecutable 文件的權限fileNameabsolutePathpathbaseNamecompleteSuffixsuffix當遍歷時,有利于建立新的Qdir對象丫嚇匯泅管毒碰酣警獺戈娠娃疲餅胖酚戮也察弦巴鐘虜鍵稀藐圈塌紹嫡夜Q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論