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