在做好介面的布局後,開始對各個控制項的處理。
首先是qtextedit *com_data_edit, 串列埠接收資料視窗,同時也可以在此編輯框裡實現鍵盤輸入轉換成串列埠輸出。在預設的情況下,qtextedit的字元輸入會直接在其視窗顯示,而且會有滑鼠右健選單,滑鼠中鍵的貼上功能。在我的設計中,需要攔截鍵盤按鍵事件,攔截到的鍵盤按鍵直接通過串列埠傳送出去;需要遮蔽滑鼠右鍵選單的貼上功能,滑鼠中鍵的貼上功能。關於攔截鍵盤按鍵,網上查詢到用事件過濾器的辦法來處理。先在工程的widget類裡過載bool eventfilter(qobject *obj, qevent *event),這是qojbect的事件過濾器函式。設定com_data_edit使用事件過濾器:com_data_edit->installeventfilter(this)。過載的eventfilter具體實現如下:
bool widget::eventfilter(qobject *obj, qevent *event)
else if (event->type() == qevent::keyrelease)//攔截com_data_edit的鍵盤釋放事件,攔截成功返回true
}return false;//return qwidget::eventfilter(target, event);
}
關於滑鼠右健及中鍵貼上功能,網上有過載相關的控制項類,在彈出選單事件中先備份貼上板,然後清除,最後再恢復貼上板,這個方法可以解決滑鼠右健貼上問題。關於滑鼠中鍵,雖然在事件過濾器中遮蔽此按鍵,但是在com_data_edit中還是會貼上,不知是否是bug。後來呼叫com_data_edit->setreadonly(true);後,解決滑鼠中鍵,右健貼上問題,不用去過濾器裡面處理,同時還保留了滑鼠右健的copy功能。
其次,設定剩餘的控制項。剩下的控制項沒有什麼特別的地方,在此暫時略過。
關於事件過濾器,下面摘錄自「qt學習之路(22): 事件過濾器 --
「如果乙個元件安裝了多個過濾器,則最後乙個安裝的會最先呼叫,類似於堆疊的行為。
注意,如果你在事件過濾器中delete了某個接收元件,務必將返回值設為true。否則,qt還是會將事件分發給這個接收元件,從而導致程式崩潰。
參考:qt學習之路(22): 事件過濾器 --
qt qlineedit中遮蔽貼上功能--
Qt 開源串列埠工具serialplot
一 總結 serialplot,視覺化很強大的串列埠收發工具。源 1.serialplot用到了qwt外掛程式,所以先安裝好qwt。4.在pro新增 defines qwt dll qt dll win32 config release,debug release libs ld programfi...
QT學習 實現串列埠工具(1)
qt在被諾基亞放棄後,終於在最近幾天決定了出處,被芬蘭軟體公司digia收購了,qt.digia.com,希望以後能發展的更好。再不在弄點什麼學學,在公司還真沒什麼事做了,本來想把寫的微控制器程式 優化下,不過看著冗長的 不知道怎麼 入手,已經優化了一段時間,效果一般啊。還是做點別的,不然什麼事都不...
qt串列埠程式設計
本帖被 xchinux 執行加亮操作 2008 04 22 serial.cpp int main int argc,char argv mainwindow.h ifndef main window h define main window h include class qlabel class...