網站開發(fā)教學網站百度云網盤資源搜索
前言:
? ? ? ? 學習筆記的內容來自B站up主阿西拜編程
《Qt6 C++開發(fā)指南 》2023(上冊,完整版)_嗶哩嗶哩_bilibili《Qt6 C++開發(fā)指南 》2023(上冊,完整版)共計84條視頻,包括:00書籍介紹、1.1Qt簡介、1.2Qt6安裝等,UP主更多精彩視頻,請關注UP賬號。https://www.bilibili.com/video/BV1km4y1k7CW/
嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ss5138
一、Qt Creator 使用技巧?
? ? ? ? ? ? ? ? ? ? ? 快捷鍵使用
F4 | 在同名的頭文件和源程序文件之間切換 |
F2 | 變量:跳轉到聲明;函數:聲明和定義切換 |
Ctrl+Shift+R | 該名稱,將所有用到這個字符的地方替換掉 |
Ctrl+I | 為選中的文本自動縮進 |
Ctrl+/ | 注釋或取消注釋 |
F1 | 為光標所在的位置顯示幫助文檔 |
Ctrl+Shift+S | 文件全部保存 |
Ctrl+F | 調出查找和替換對話框 |
F3 | 查找下一個 |
Ctrl+B | 編譯當前項目 |
F5 | 開始調試 |
F10 | 單步(略過)調試,執(zhí)行當前程序語句 |
F11 | 單步(跟蹤)調試,如果當前行里有函數,就跟蹤進入函數 |
F9 | 設置或取消斷點 |
二、 Qt的元對象系統(tǒng)
2.1 Qt的元對象系統(tǒng)概述
????????QT中引入元對象系統(tǒng)對標準C++語言進行了擴展。
概述
????????●????????Qobject類是所有使用元對象系統(tǒng)的類的基類
????????●?????????必須在一個類的開頭部分插入宏Q_OBJECT,???????????????????才可以使用元對象系統(tǒng)的特性。???????
???????????????????當?MoC發(fā)現類中定義了Q OBJECT宏時,會為其生成相應的C++源文件
????????●?????????元對象編譯器 (Meta-object Compiler,MOC) 是一個預處理器,先將Qt的特性
? ? ? ? ?? ? ? ? ? 程序轉換為標準C++程序,在由標準C++編譯器進行編譯
Object類:
????????元對象系統(tǒng)的特性是通過QObject的一些函數來實現的。
????????●?元對象 (meta object): 每個QObject及其子類的實例都有一個元對象 (靜態(tài)變
量staticMetaObject) 。函數metaobject()可以返回它的指針。
???????●??類型信息: Qobject的inherits()函數可以判斷繼承關系。
???????●? 動態(tài)翻譯: 函數tr()返回一個字符串的翻譯版本。
???????●? 對象樹:表示對象間從屬關系的樹狀結構。Qobject提供了parent()、children().
findChildren()等函數。對象樹中的某個對象被刪除時,它的子對象也將被刪除。
???????●? 信號和槽:對象間的通信機制。
???????●??屬性系統(tǒng): 可以使用宏Q_PROPERTY定義屬性,Qobject的setProperty()會設置屬
性的值或定義動態(tài)屬性; property函數會返回屬性的值。
2.2 屬性系統(tǒng)
屬性系統(tǒng):
在oobject的子類中可以通過Q_PROPERTY宏定義屬性。
?2.3 信號與槽
信號與槽是元對象系統(tǒng)支持的,對象間通信所采取的機制
connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
最后一個參數:Qt::ConnectionType表示了信號與槽槽之間的關聯方式
????????Qt::AutoConnection (缺省值):自動確定關聯方式。
????????Qt::DirectConnection:信號被發(fā)射時,槽立即執(zhí)行,槽函數與信號在同一線程
????????Qt::QueuedConnection: 事件循環(huán)回到接收者線程后執(zhí)行槽,槽與信號在不同線程信號線程會被阻塞直
????????Qt::BlockingQueueConnection: 與Qt::QueuedConnection相似,到槽執(zhí)行完畢。當槽函數與信號在同一線程,會造成死鎖。
disconnect()函數的使用
1.????????解除與一個sender所有signal的連接:
? ? ? ? ? ?disconnect(myobject,nullptr,nullptr,nullptr);//靜態(tài)函數
? ? ? ? ? ?myobject->disconnect();//成員函數
2.????????解除與一個特定信號的所有連接:
? ? ? ? ? ?disconnect(myobject,SIGNAL(mysignal()),nullptr, nullptr);
? ? ? ? ? ?myobject->disconnect(SIGNAL(mySignal()));
3.????????解除與一個特定receiver的所有連接:
? ? ? ? ? ?disconnect(myobject, nullptr,myReceiver,nullptr);
? ? ? ? ? ?myobject->disconnect(myReceiver);
4.????????解除一對特定的信號和槽的連接:
? ? ? ? ? ?disconnect(lineEdit,&QLineEdit::textChanged,label,&QLabel::setText);
?2.4 對象數
對象樹
Qobject以對象樹的形式組織自己,其構造函數里有一個parent參數。當用另一個
對象作為父對象創(chuàng)建一個QObject時,它會被添加到父對象的children()列表中,而
當父對象被刪除時是時,它會被刪除。這種方法非常適合GUI對象的需求。例如,
QShortcut(鍵盤快捷鍵)是相關窗口的子對象,因此當用戶關閉該窗口時,快捷鍵
也會被刪除。
?三、C++補充知識——STL(標準模板庫)
STL六大部件
- 容器(Containers)
- 分配器(Allocators)
- 算法(Algorithm)
- 迭代器(Iterators)
- 適配器(Adapters)
- 仿函數(Functors)
容器的分類
1、序列式容器(Sequence containers)
????????每個元素都有固定位置 - - 取決于插入時機和地點和元素值無關。
????????vector、 deque、 list、 stack、 queue
2、關聯式容器 (Associated containers)
????????元素位置取決于特定的排序準則,和插入順序無關。
????????set、multiset、map、multimap