Upgrade to Pro — share decks privately, control downloads, hide ads and more …

被 Qt 快樂的玩弄 part 1

被 Qt 快樂的玩弄 part 1

nctunba

May 30, 2012
Tweet

More Decks by nctunba

Other Decks in Programming

Transcript

  1. 安裝 Qt(5/6) 9 Development Tools • Desktop Qt • Qt

    4.8.0 (Desktop) • Desktop Qt 4.8 – MinGW Miscellaneous • MinGW 4.4 Documentation • Qt Documentation
  2.  打開你的 Qt creator  點選 File->New file or Project

    開新專案  選擇 Other project 中的 Empty Qt project  在 Name 那一欄寫上專案的名稱  不要選擇 Shadow build (別緊張,方便觀察)  next 到底! 20 DIY-1(1/3)
  3.  qmake –project  qmake  make 23 Qt 操作流程

    src/1/>ls main.cpp src/1/>qmake –project main.cpp 1.pro src/1/>qmake main.cpp 1.pro Makefile src/1/>make … src/1/>ls 1* 1.pro Makefile main.cpp main.o
  4.  Qt 可以分為兩個部分  函式庫 和 C++ 的一般的函式庫沒什麼不同  特殊功能

    使用特殊功能,需要先經過 qmake 改造! 有一些函式庫需要使用 Qt 的特殊功能 24
  5.  Qt 的函式庫非常強大!  想想 KDE 吧~  我們會先介紹 

    一些好用的巨集  一些好用的函式  一些好用的容器(container) 25 Qt 函式庫
  6.  想得到的函式前面加個 q 或 Q 即可  qrand()  qAbs()

     qSort() <- quick sort  … 29 好用函式
  7.  C++ 的容器前面加個 Q 即可  用來完全取代 C++ 的容器 

    如  QList, QVector, QMap, QSet…  QLinkedList, QStack, QQueue, QStringList… 30 容器 Container
  8.  最常用的 Container  不知道該用什麼 Container ?用 QList 就對了! 

    相容相當多種操作方式。 31 Container – QList(1/3)
  9.  size 的型態為 int  別當成 std::list  可由標準庫的 container

    轉換  QList.fromStdList()  QList.fromStdVector()  QList.fromStdSet()  … 33 Container – QList(3/3)
  10.  C++ 的格式化字串很糟?  std::cout<<a<<“ “<<b<<“:”<<a<<endl;  放心,我們還有 Qt 

    QString(“%1 %2:%1\n”).arg(a).arg(b); 35 Container – QString(2/2) 注意:Qstring 應該 Qt 自己的方法印出, 不能用 std::cout ,除非用 qPrintable()
  11.  這是一個關於 Qt 的非常溫馨的人倫故事。  Qt 的世界裡,每個物件都可以有自己的爸爸。  如果爸爸要死了,死前會把兒子全部殺掉。 

    若兒子要死了,死前會也通知一下自己的爸爸,免 得爸爸之後要殺死他的時候找不到人。 39 QObject(2/9)
  12.  parent and children  可說是 Qt 賦予 C++ 類似

    gc 的機制  對 Qt 來說是非常重要的機制  再重申一遍,不要被繼承搞混! 45 QObject(8/9) parent child gc: Garbage Collection
  13.  第一種做法  處處要傳訊息給顯顯,所以必須「知道」顯顯  顯顯要通知處處,所以也必須「知道」處處  第二種做法  回呼

    – 一般 GUI 框架會用的方式  第三種做法  Qt 的 signal and slot ~~ 49 QObject-Signal and Slot(3/7)
  14. signal  每個繼承自 QObject 的類別都可以有這個功能  對自己狀態的宣示  自己不需要「知道」要通知誰 50

    QObject-Signal and Slot(4/7) 處處 宣示:我處理完資料了 「我不需要知道誰會接到我資料」 「接到的人自己會去處理」
  15. slot  每個繼承自 QObject 的類別都可以有這個功能  可以接受 signal  不需要「知道」會被誰通知,只要格式ok即可

    51 QObject-Signal and Slot(5/7) 接受:我會顯示收到的資料 「我不需要知道是誰丟資料給我」 「不是顯 顯也行,誰給我,我就做」 顯顯
  16.  connect 函式  連接 signal 和 slot  讓

    signal 和 slot 建立關連  connect(sender, signal, receiver, slot) 52 QObject-Signal and Slot(6/7)
  17.  connect 函式  connect(處處, 送資料, 顯顯, 顯示資料);  connect(顯顯,

    我搞定了, 處處, 繼續處理資料) QObject::connect(processorr, SIGNAL(send(string)), displayer, SLOT(display(string)) 53 QObject-Signal and Slot(7/7) SIGNAL, SLOT 是一個巨集