Qt基礎面試題
1:QT信號槽機制的優缺點 :
1)QT信號槽機制的引用精簡了程序員的代碼量 (不用寫回調函數)
2)QT的信號可以對應多個槽(但他們的調用順序隨機),也可以多個槽映射一個信號
3)QT的信號槽的建立和解除綁定十分自由
4)信號槽同真正的回調函數比起來時間的耗損還是很大的,所有在嵌入式實時系統中應當慎用
5)信號槽的參數限定很多例如不能攜帶模板類參數,不能出現宏定義等等
2、多線程情況下, Qt中的信號槽分別在什么線程中執行, 如何控制?
可以通過connect函數的第五個參數來控制, 信號槽執行時所在的線程
1)自動連接(AutoConnection),默認的連接方式,如果信號與槽,也就是發送者與接受者在同一線程,等同於直接連接;如果發送者與接受者處在不同線程,等同於隊列連接。
2)直接連接(DirectConnection),當信號發射時,槽函數立即直接調用。無論槽函數所屬對象在哪個線程,槽函數總在發送者所在線程執行,即槽函數和信號發送者在同一線程
3)隊列連接(QueuedConnection),當控制權回到接受者所在線程的事件循環時,槽函數被調用。槽函數在接受者所在線程執行,即槽函數與信號接受者在同一線程
3、描述QT中的文件流(QTextStream)和數據流(QDataStream)的區別, 他們都能幫助我們完成一些什么事情.
QTextStream – 文本流, 操作輕量級數據(int, double, QString), 數據寫入文件中之后以文本的方式呈現。
QDataStream – 數據流, 通過數據流可以操作各種數據類型, 包括類對象, 存儲到文件中數據可以還原到內存。
QTextStream, QDataStream可以操作磁盤文件, 也可以操作內存數據, 通過流對象可以將數據打包到內存, 進行數據的傳輸.
4、描述Qt下Tcp通信的整個流程
具體解釋 :https://www.cnblogs.com/yuweifeng/p/9382841.html
QT如果要進行網絡編程首先需要在.pro中添加如下代碼:QT += network
服務器端:
1. 創建用於監聽的套接字
2. 給套接字設置監聽
3. 如果有連接到來, 監聽的套接字會發出信號newConnected
4. 接收連接, 通過nextPendingConnection()函數, 返回一個QTcpSocket類型的套接字對象(用於通信)
5. 使用用於通信的套接字對象通信
1>. 發送數據: write
2>. 接收數據: readAll/read
客戶端:
1. 創建用於通信的套接字
2. 連接服務器: connectToHost
3. 連接成功與服務器通信
1>. 發送數據: write
2>. 接收數據: readAll/read
6、描述QT下udp通信的整個流程
QT下udp通信服務器端和客戶端的關系是對等的, 做的處理也是一樣的.
1. 創建套接字對象
2. 如果需要接收數據, 必須綁定端口
3. 發送數據: writeDatagram
4. 接收數據: readDatagram
7: 描述QT下多線程的兩種使用方法, 以及注意事項
第一種方法:
1. 創建一個類從QThread類派生
2. 在子線程類中重寫 run 函數, 將處理操作寫入該函數中
3. 在主線程中創建子線程對象, 啟動子線程, 調用start()函數
第二種方法:
1. 將業務處理抽象成一個業務類, 在該類中創建一個業務處理函數
2. 在主線程中創建一QThread類對象
3. 在主線程中創建一個業務類對象
4. 將業務類對象移動到子線程中
5. 在主線程中啟動子線程
6. 通過信號槽的方式, 執行業務類中的業務處理函數
多線程使用注意事項:
* 1. 業務對象, 構造的時候不能指定父對象
* 2. 子線程中不能處理ui窗口(ui相關的類)
* 3. 子線程中只能處理一些數據相關的操作, 不能涉及窗口