QT程式設計的知識碎片(一)

2021-07-01 19:39:40 字數 833 閱讀 7933

模態是指當子視窗彈出時,焦點始終被強行集中於子視窗,只要子視窗不退出,焦點就不會被釋放。非模態正好相反。

——家居安防監控系統開發中所遇到的問題

好吧,想想又有好久沒有寫部落格了,最近遇到的問題特別多,在不操起鍵盤記一記恐怕又會在同乙個地方一次又一次跌倒了!

問題一:模態與非模態

以前一直沒有弄明白為什麼我的程式一啟動便可以列印每乙個介面的除錯資訊(我一直以為整個程式是單執行緒的),大概是對模態與非模態的知識認識不夠吧。從執行緒角度講,模態子視窗的執行緒是阻塞的,父、子視窗各有乙個執行緒,當建立子視窗時,父執行緒就被子執行緒阻塞掉;非模態執行緒不是阻塞型的,父、子執行緒可以並行執行。這裡面有兩個關鍵函式:exec()和show(),具體類容參照了以下仁兄的部落格:

(現象:在程式開始時,每乙個介面都進行了初始化,而不管你是否使用show()使其顯示)

問題二:多執行緒程式設計

第一版程式中,出現了很多問題,比如我用定時器實現多串列埠的定時掃瞄從而實現資料的接收(在視屏捕獲中已經使用了乙個定時器進行資料重新整理),但由於設定的掃瞄間隔時間太長(最少30ms左右,因為qt下的定時器精度好像只有20ms左右)而無法正常接收節點發來的資料(當兩個節點傳送資料的時間間隔較短時,便會造成第二個資料幀無法接收),但如果將定時器時間設定得過短,卻會造成卡屏現象(用定時器做鍵盤掃瞄也會出現同樣的情況),因此決定為串列埠掃瞄程式以及鍵盤掃瞄部分單獨開乙個執行緒,用for(;;)迴圈的方式進行掃瞄,並通過執行緒間訊號與槽的通訊方式將接收到的qbytearray資料傳輸到主線程中進行處理顯示,當然,這又觸及到多個模組的知識:訊號與槽間的通訊(主要是自定義資料型別的傳輸)、元物件、多執行緒程式設計、事件迴圈等,參照了以下部落格:

有關於攝像頭的程式段)

c++多程序開發:

Android 碎片知識一

一 小回顧 建立碎片的步驟 新建相應碎片的布局檔案 新建碎片類繼承自fragment類 在碎片類引入碎片布局檔案 在activity main.xml新增fragment控制項 二 動態新增碎片的步驟 1 建立待新增的碎片例項。2 獲取fragment,在活動中可以直接通過呼叫getsupportf...

QT 知識小結 一

1 qt介面亂碼的解決方法 解決在win7系統外其它系統主介面上漢字為亂碼的情況 可能是缺少相關的字型所引起的問題 qtextcodec codec qtextcodec codecforname system qtextcodec setcodecforlocale codec qtextcode...

Qt知識總結(一)

在qt中設定好的事件被觸發,可以傳送指定的訊號,而這個訊號是以廣播的方式傳遞的。訊號可分為預定義訊號和自定義訊號,自定義訊號需要使用signals進行修飾 槽是接受訊號後的相應的動作,在qt4中槽函式需要使用slots進行修飾,而在qt5中則不再需要了。注意 槽函式的引數與返回型別應與訊號一致 槽函...