Qt面試題匯總

目錄

1. 簡單說一下Qt

?2.?用過QT中的哪些模塊?

3. 說一些你常用的Qt控件??

?4. Qt中如何創建一個窗口?

5.?說一下QT中創建控件的方式?

6. 說一下Qt中信號和槽機制是什么?

7. 說一下QT信號與槽機制原理?

8. 如何自定義信號和槽,信號和槽怎么連接?

9. 說一下Qt的事件處理流程?

10.說一下事件過濾器的作用?

11.Qt 中 connect() 函數中參數有哪些,第五個參數的作用和可選類型呢?

12.為什么選擇?HTTP,不直接使用 TCP?

13.?說一下QT事件與信號的區別?

14.是否用過 Qt 的線程模塊?并簡單說明使用過的方式或類

15.Qt中怎么保證線程安全?

16.說一下TCP 三次握手的過程?

17.說一下TCP 連接斷開時的四次揮手流程?

18.?Qt 中的內存管理機制是如何實現的?


1. 簡單說一下Qt

Qt 是一個跨平臺的應用程序開發框架,它提供了一系列的工具和庫,用于開發圖形用戶界面(GUI)應用程序。

優點:

  1. 跨平臺,幾乎支持所有平臺

  2. 接口簡單,文檔詳細

  3. 開發效率高

缺點: Qt 作為一個軟件平臺,比較龐大、臃腫。

?2.?用過QT中的哪些模塊?

QtCore:提供基礎類,比如 QStringQListQVariantQDateTime、事件循環、定時器等,是所有模塊的基礎。

QtGui:用于圖形界面相關類,如圖像處理、字體、顏色、繪圖(QPainter)。

QtWidgets:實現傳統桌面控件,如 QPushButtonQTableWidgetQMainWindow,用于搭建 UI 界面。

QtNetwork:用于實現 TCP/UDP 通信、HTTP 請求、Socket 服務等網絡功能。

QtMultimedia:用于音頻、視頻播放和錄制(如 QMediaPlayer)。

QtSerialPort:串口通信模塊,常用于與外部設備的數據交互。

QtConcurrent / QThread:實現多線程與并發處理。

QtSql:用于連接數據庫,如 SQLite、MySQL,執行查詢、增刪改等操作。

QtCharts:用于圖表展示,常用于可視化折線圖、柱狀圖等。

3. 說一些你常用的Qt控件??

QLabel:標簽,用于顯示文字或圖像

QPushButton:按鈕,支持點擊事件

QLineEdit:單行文本輸入框

QSlider:滑動條

QProgressBar:進度條

QTabWidget:標簽頁控件(多頁切換)

QScrollArea:帶滾動條區域

QSplitter:可調節大小的分隔窗口

QFrame:基本容器,可自定義邊框樣式

QListWidget:列表控件

QFileDialog:文件/目錄選擇對話框

QColorDialog:顏色選擇器

QMessageBox:消息提示框(信息、警告、確認等)

QInputDialog:獲取用戶輸入的簡易對話框

QCalendarWidget:日歷選擇控件

QDateTimeEdit:日期時間輸入框

QChartView(QtCharts):圖表控件(柱狀圖、折線圖等)

?4. Qt中如何創建一個窗口?

在 Qt 中創建一個窗口通常是通過繼承 QMainWindowQWidget 來實現,構造窗口對象、設置標題、大小等屬性,然后調用 .show() 顯示窗口,最后進入 QApplication 的事件循環。

5.?說一下QT中創建控件的方式?

Qt 中創建控件的方式主要包括三種:代碼創建(手動 new)、UI 設計器創建(.ui 文件)、以及自定義控件(繼承 QWidget)

6. 說一下Qt中信號和槽機制是什么?

Qt 中的信號和槽(Signal & Slot)機制是一種對象間通信機制,用于在對象狀態變化時通知其他對象,類似于發布-訂閱模式。
當一個對象發出信號時,所有與該信號連接的槽函數都會自動被調用,從而實現模塊間的解耦。

7. 說一下QT信號與槽機制原理?

?Qt 的信號與槽機制是基于 元對象系統(Meta-Object System) 實現的,核心依賴 QObjectmoc(元對象編譯器)。

  1. moc 掃描頭文件中的 signalsslots,生成信號和槽的元信息。

  2. 把信號槽信息按聲明順序存儲到類的靜態成員 staticMetaObject 中,建立索引映射。

  3. connect 調用時,根據信號和槽的索引,在連接表(內部數據結構)中記錄對應關系。

  4. emit 發射信號時,調用 QMetaObject::activate,傳入信號索引、對象指針和參數列表。

  5. activate 根據信號索引查找連接表,找到所有對應的槽函數索引。

  6. 根據槽索引調用對應槽函數,支持直接調用或跨線程異步調用。

8. 如何自定義信號和槽,信號和槽怎么連接?

信號(signal):是類中定義的特殊成員(signals: 聲明),用于通知某些事件發生。

槽(slot):是一個普通成員函數或用 slots: 標記的函數,用于接收信號觸發的處理邏輯。

連接方式:通過 QObject::connect() 函數將信號與槽綁定。

9. 說一下Qt的事件處理流程?

在 Qt 中,事件由系統或用戶行為觸發后,會被加入事件隊列,并通過事件循環分發到對應的對象。

如果該對象或其祖先安裝了事件過濾器,事件會優先被過濾器處理;

否則,事件會傳遞給對象的 event() 函數,進而調用具體的事件處理函數(如 mousePressEvent())。

如果事件未被處理,可能會繼續向上傳遞或被忽略,從而完成整個事件處理流程。

10.說一下事件過濾器的作用?

用于在事件到達目標對象之前提前攔截和處理事件

通過安裝事件過濾器,可以在不修改目標對象代碼的情況下,對其事件進行監聽、修改甚至阻止,常用于日志記錄、統一處理、特殊控件行為擴展等場景。

11.Qt 中 connect() 函數中參數有哪些,第五個參數的作用和可選類型呢?

sender:發送信號的對象

signal:發送的信號(用 SIGNAL() 宏包裹)

receiver:接收信號的對象

slot:槽函數(用 SLOT() 宏包裹)

connectionType(第五個參數)連接類型,控制信號和槽的調用方式

第五個參數(connectionType)可選值:

Qt::AutoConnection:默認,自動判斷(跨線程→隊列連接,否則→直接連接)

Qt::DirectConnection:立即同步調用槽函數(在發送信號的線程中)

Qt::QueuedConnection:異步調用,槽函數在接收者線程中執行

Qt::BlockingQueuedConnection:跨線程同步執行,發送線程會阻塞直到槽執行完(?不能用于主線程)

Qt::UniqueConnection:防止重復連接(需與其他類型一起使用)

12.為什么選擇?HTTP,不直接使用 TCP?

TCP 是傳輸層協議,提供可靠的字節流傳輸,而 HTTP 是基于 TCP 之上的應用層協議,HTTP封裝了請求響應格式、狀態碼、頭部字段等,極大簡化了通信流程,提升了開發效率。

而使用 TCP 通信雖然更底層、性能好,但需要開發者自行處理協議設計、粘包拆包、加密安全等復雜細節,開發和維護成本高。

13.?說一下QT事件與信號的區別?

事件(Event) 是系統或用戶交互產生的底層通知,如鼠標點擊、鍵盤按下、窗口變化等,它們通過事件循環分發給對象,需重寫事件處理函數(如 mousePressEvent)來響應。

信號(Signal) 是 Qt 對象之間的通信機制,表示對象狀態變化或動作發生,配合槽(Slot)實現對象間的解耦通知。信號是程序內部主動發出的,用于組件間消息傳遞。

14.是否用過 Qt 的線程模塊?并簡單說明使用過的方式或類

繼承 QThread 重寫 run() 方法,實現自定義線程任務

使用 QObject 對象放到線程里,通過 moveToThread() 把對象和它的槽函數移到新線程運行

利用 Qt 的信號與槽機制實現線程間安全通信

使用 QtConcurrent 進行簡單的并發任務(如果用過)

15.Qt中怎么保證線程安全?

信號與槽機制:使用跨線程信號槽連接(Qt::QueuedConnection),自動在線程間傳遞消息,避免直接共享數據

互斥鎖(QMutex):對共享資源加鎖,防止多個線程同時訪問導致數據沖突

讀寫鎖(QReadWriteLock):支持多個線程并發讀,寫操作時加寫鎖,提升性能

原子操作(QAtomicXXX):對簡單數據類型做無鎖的線程安全操作

線程局部存儲(QThreadStorage):為每個線程維護獨立數據,避免數據共享問題

16.說一下TCP 三次握手的過程?

第一次握手(客戶端 → 服務端):

客戶端發送一個帶 SYN 標志位 的數據包,表示請求建立連接,并隨機初始化一個序列號 seq=x。

第二次握手(服務端 → 客戶端):

服務端收到后,發送一個帶 SYN 和 ACK 標志位 的數據包,表示接受請求并同步自己的連接信息。它會回復 ack=x+1 表示收到了客戶端的 SYN,同時生成自己的序列號 seq=y。

第三次握手(客戶端 → 服務端):

客戶端收到后,發送一個帶 ACK 標志位 的數據包,ack=y+1,表示自己也收到了服務端的確認。至此,雙方建立連接,可以開始數據傳輸了。

17.說一下TCP 連接斷開時的四次揮手流程?

第一次揮手(客戶端 → 服務端)

客戶端發送一個 FIN 報文,表示“我沒有數據要發了”,請求關閉連接。

第二次揮手(服務端 → 客戶端)

服務端收到 FIN 后,發送一個 ACK 報文,表示“我知道你要斷開了”。但此時服務端可能還有數據要發,連接還沒完全斷。

第三次揮手(服務端 → 客戶端)

等服務端數據發送完畢后,主動發送一個 FIN 報文,告訴客戶端:“我也沒數據要發了”。

第四次揮手(客戶端 → 服務端)

客戶端收到 FIN 后,發送一個 ACK 報文,表示“我確認你也關閉了”。至此,連接關閉。

18.?Qt 中的內存管理機制是如何實現的?

Qt 的內存管理依賴于其 父子對象機制。當你用 new 創建一個 QObject 派生類對象,并將其父對象傳入構造函數中,Qt 會自動將該對象加入父對象的子對象列表中。當父對象銷毀時,它會自動銷毀所有子對象,從而避免內存泄漏。

此外,Qt 的 deleteLater() 方法可用于安全地延遲刪除對象,確保不會在事件處理中立即銷毀自己。

整體上,這種機制實現了自動層級釋放、生命周期托管和結構化內存管理

19.QT界面卡頓遇到過嗎?怎么優化?

在使用 Qt 開發中,我確實遇到過界面卡頓的情況,主要原因通常是將耗時操作(如網絡請求、大量計算、文件讀寫等)放在主線程中執行,阻塞了 GUI 線程。

我主要通過將耗時任務放入子線程、使用 QThreadQtConcurrent 進行后臺處理,再通過信號槽異步更新 UI,從而優化界面流暢性。

簡答:Qt UI 卡頓多數是主線程阻塞導致的,關鍵優化思路是:UI 和邏輯分離,耗時操作異步執行,主線程專注渲染

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86191.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【stm32】標準庫學習——USART串口

目錄 一、USART串口 1.串口參數及時序 2.USART簡介 3.配置USART基本結構 4.初始化模板 (1) 接收一個數據 (2) 發送一個數據 一、USART串口 1.串口參數及時序 波特率:串口通信的速率起始位:標志一個數據幀的開始,固定為低電平數據位:數據幀的有效載荷&#…

黑馬Day01-03集開始

03集 JSX jsx里面可以寫 表達式,表達式里面會返回一個值js語法的擴展,需要babel解析才能夠在瀏覽器運行 語法 使用花括號 {} ,在里面進行編寫jsx代碼04集 高頻場景 使用引號傳遞字符串 使用js變量 函數調用和方法調用 使用js對象.js自帶的一些對象或new出來的對象{&quo…

vue 路由學習

params 不能傳遞對象類型如 [ ]和{ } query傳參 總結: query傳參既可以通過name 和path 找到路由規則里的組件,所以為了統一避免非必要麻煩 無論是使用query傳參還是 params傳參 映射路由建議統一使用 name 進階 props的使用 備注:資料來自…

JDK安裝全攻略:開啟Java編程大門

目錄 一、安裝前準備1.1 確認系統類型1.2 檢查系統要求1.3 下載 JDK 安裝包 二、Windows 系統下 JDK 安裝步驟2.1 雙擊安裝包2.2 選擇安裝目錄2.3 完成安裝 三、Windows 系統環境變量配置3.1 打開環境變量設置3.2 配置 JAVA_HOME 變量3.3 配置 Path 變量3.4 驗證配置 四、Linux…

《P1253 扶蘇的問題》

題目描述 給定一個長度為 n 的序列 a,要求支持如下三個操作: 給定區間 [l,r],將區間內每個數都修改為 x。給定區間 [l,r],將區間內每個數都加上 x。給定區間 [l,r],求區間內的最大值。 輸入格式 第一行是兩個整數&…

09.【C語言學習筆記】指針(一)

目錄 1. 內存和地址 1.1 內存 1.2 究竟該如何理解編址 2. 指針變量和地址 2.1 取地址操作符(&) 2.2 指針變量和解引用操作符(*) 2.2.1 指針變量 2.2.2 如何拆解指針類型 2.2.3 解引用操作符 * 2.3 指針變量的大小…

Java中static關鍵字的作用與使用詳解

static是Java中一個非常重要的關鍵字,它可以用來修飾變量、方法、代碼塊和嵌套類。下面將從多個方面詳細解釋static的作用和使用方法。 一、static變量(類變量) 作用 static變量屬于類,而不是類的某個實例。所有實例共享同一個s…

HMLDM-UD100A 型工業激光測距儀通過modbusRTU 轉 profinet 網關輕松接入到西門子1200plc

HMLDM-UD100A 型工業激光測距儀通過modbusRTU 轉 profinet 網關輕松接入到西門子1200plc 在現代工業生產與自動化控制領域,精準的測量設備與高效的通信技術至關重要。HMLDM-UD100A 型工業激光測距儀憑借其高精度、穩定性強等優勢,廣泛應用于各類工業場景…

數據結構與算法:圖論——深度優先搜索dfs

深度優先搜索dfs 提到深度優先搜索(dfs),就不得不說和廣度優先搜索(bfs)有什么區別 根據搜索方式的不同,可以將圖的遍歷分為「深度優先搜索」和「廣度優先搜索」。 深度優先搜索:從某一頂點出…

數組題解——?合并區間【LeetCode】

56. 合并區間 排序: 將所有區間按起始位置 start 從小到大排序。這樣,重疊的區間會相鄰排列,方便后續合并。 合并: 初始化一個空列表 merged,用于存儲合并后的區間。遍歷排序后的區間列表: 如果 merged 為…

關于高精度和鏈表的詳細講解(從屬于GESP五級)

本章內容 高精度 鏈表 位數再多,只管穩穩進位,終會把答案寫滿。 一、高精度 1. 什么是高精度 ? 定義 “高精度整數”指不受 C 原生整型 (int / long long) 位寬限制,而用數組模擬任意位數的大整數。 ? 必要性 64 位 long long 僅能…

Python自動化框架選型指南:Selenium/Airflow/Celery該選誰?

在Python自動化領域,Selenium、Airflow和Celery是三個高頻出現的工具,但它們的定位和適用場景截然不同。許多開發者在技術選型時容易混淆它們的邊界,導致項目架構臃腫或功能不匹配。本文將通過對比分析,幫你明確不同場景下的最佳選擇。 一、框架定位與核心功能對比 框架核…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | DrinkWater(喝水記錄組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— DrinkWater組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 語法結…

UAVAI-YOLO:無人機航拍圖像的小目標檢測模型

摘要 針對無人機航拍圖像目標檢測效果差的問題&#xff0c;提出改進的UAVAI-YOLO模型。首先&#xff0c;為使模型獲得更加豐富的語義信息&#xff0c;使用改進可變形卷積網絡&#xff08;deformable convolutional networks&#xff0c;DCN&#xff09;替換原骨干&#xff08…

Solidity 入門教程(一):Hello Web3,從一個字符串開始!

學習 Solidity 最好的方式&#xff0c;就是寫出你的第一個合約&#xff01;在本篇文章中&#xff0c;我們將用極簡的代碼&#xff0c;通過 Remix 平臺快速實現并運行一個 “Hello Web3!” 合約&#xff0c;正式邁入智能合約開發的大門。 一、什么是 Solidity&#xff1f; Sol…

串擾與包地

串擾與包地&#xff1a; 串擾與包地一直是業界非常關心的一個問題&#xff0c;圍繞著它們的爭論非常多&#xff0c;那到底是包地好 還是不包地好呢?高速先生嘗試著從理論和實際測試上來給大家做一個分析。 為了驗證它&#xff0c;高速先生做了以下幾種情況&#xff0c;如圖5-…

leetcode hot 100之:二叉樹的最近公共祖先

本來不打算寫的哈哈哈但是發現這一道遞歸我是有思路的&#xff01;&#xff01;自己能想到一些方向&#xff01;我真棒&#xff01;所以記錄一下哈哈哈 我的思路&#xff1a; 1、祖先一定是自身或往上找&#xff0c;所以如何逆著走呢&#xff1f; 2、3種情況&#xff1a; 有…

【VUE】某時間某空間占用情況效果展示,vue2+element ui實現。場景:會議室占用、教室占用等。

某時間某空間占用情況效果展示&#xff0c;vue2element ui實現。場景&#xff1a;會議室占用、教室占用等。 場景說明&#xff1a; 現在需要基于vue2和el-table實現每日會議室個時間點占用情況。 已知數據&#xff1a; 1、會議室數據&#xff08;名稱&#xff0c;id&#xff…

Git更換源方式記錄

本文首發地址&#xff1a;https://www.dawnsite.cn/archives/198.html 該方式前提是本地項目已關聯遠程倉庫&#xff0c;由于業務變更git地址改變 1. 移除本地已有遠程倉庫 git remote remove origin2. 添加新的遠程倉庫源 git remote add origin "clone地址"3.一步…

前端面試專欄-主流框架:12. Vue3響應式原理與API

&#x1f525; 歡迎來到前端面試通關指南專欄&#xff01;從js精講到框架到實戰&#xff0c;漸進系統化學習&#xff0c;堅持解鎖新技能&#xff0c;祝你輕松拿下心儀offer。 前端面試通關指南專欄主頁 前端面試專欄規劃詳情 Vue3響應式原理與API詳解 一、引言 Vue3作為Vue.j…