1. 程式人生 > >初學習Qt的一些感悟

初學習Qt的一些感悟

後者 不明確 賦值 操作符 qt ui meta 但是 個人 you

最近用Qt寫了個人項目,有如下心得(可能有不準確):
  1. Qt盡管沒有擴展C++語法,但是有額外編譯鏈,每個Q_OBJECT類編譯的時候會用moc工具生成另一個meta C++類,之後就是標準C++編譯流程。
  2. QT test語法似乎比Google test簡潔,就QCOMPARE和QVERIFY兩個,但是有很多重載。另外expected和actual的順序和gtest相反。
  3. Qt UI用的是消息循環,甚至還有deleteLater這樣的功能
  4. Qt的容器用int表示數量,而不是size_t
  5. Qt的事件傳遞用的不是函數指針,而是signal-slot,兩者都是函數,這個機制完全依賴於moc,標準C++程序應該是無法實現的。
  6. Qt有比較健全的對象回收機制,如果父控件子控件都是堆上創建,那麽父控件析構會自動調用子類析構,所以不需要寫子控件的delete。有意思的是,即使在父類析構函數寫了delete子控件,也完全沒問題,因為子控件析構會和父控件解綁。由於這個解綁機制,棧上創建的對象,只要保證父控件先子控件後,也完全沒問題。
  7. Qt的layout非常智能,比html不知高到哪裏去了
  8. Qt的跨平臺支持不完美,mac和windows有的行為不太一樣,某些地方需要用宏區別對待
  9. Qt的控件提供了重載函數onEvent和on***Event兩種,後者似乎是從前者衍生的,盡管功能一樣,但後者用起來更舒服。
  10. Qt控件不提供一些C++操作符重載,比如賦值和拷貝構造,因為每個對象在樹中都有特定位置,復制的語義不明確。
  11. Qt似乎提供不同的C++的編程規範,比如<QPlainTextEdit>也有<qplaintextedit.h>這樣兩個一樣的版本,打印日誌可以qInfo("hello"),也可以qInfo() << "hello"
  12. Qt有完整的工具庫,包括文件、JSON支持、字符串等等

初學習Qt的一些感悟