响应键盘delete键的删除功能
生活随笔
收集整理的這篇文章主要介紹了
响应键盘delete键的删除功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有一段時間都沒有想出自己接下來可以寫點什么,要說沒工夫寫那是給自己找借口了,更多的原因,還是覺得東西學得還不是很徹底,寫出來的也顯得幼稚和膚淺,反倒會貽笑大方了。然而,真要是按這種心態下去的話,我這也就別指望寫點屬于自己的東西了,所以還是知道多少寫多少,由淺入深。希望一方面能幫到某些用得著的朋友,一方面也能鞏固自身所學。 在學習和應用Qt的工作當中,曾經花了很大的力氣去解決一個問題——即希望在應用的軟件當中,響應鍵盤的delete鍵去刪除某一選中控件,前提是應用程序中已經存在一個delete按鍵,即希望兩種方式都能實現對所選控件的刪除功能。 雖然在毫無頭緒的情況下,向師兄請教了此種情況下的解決途徑——使用類QWidget中的成員函數setFocus ()或setFocusPolicy( QWidget?*?w),將焦點設置在使用中的主窗口(active window,即活動窗口)。但是,情況并沒有自己想象中的順利,經過反復的修改、測試、再修改、再測試。最后也沒能得到自己想要的結果。之所以這么不順,不得不說,挫折發生還是有原因的。一方面當時自己對C++中this的使用還很生疏,而恰恰當時就需要用得著;另一方面,并不是對主窗口設置了焦點就能實現相應鍵盤刪除的功能,在此之前還必須先做好另一項前提性的工作。以下說明自己在這個過程中的解決方法。 將focus設置在主窗口,這點并沒有錯,因為成員函數setFocus()和setFocusPolicy( QWidget?*?w)本身就是為了使Widget接受鍵盤輸入的焦點。只不過,在此值得說明的是,兩個函數的使用方式和實現的功能稍有差異(對此,這里不再贅述,Qt Assistant中有更為詳盡的說明)。在實現控件的刪除功能相應鍵盤中delete鍵,首先要做的是設置好軟件中delete按鈕的另一種鍵盤按鍵快捷方式。這里有兩種方式,一是使用函數setAccel ( const?QKeySequence?& ) ,另一種是在Qt Designer中對所選widget的accel屬性設置快捷鍵,直接在鍵盤輸入即可,如ctr+D。 做完該項工作,可以說就先完成了一個必要的前提工作。接下來,就可以使用setFocus這一成員函數,把焦點設置在主窗口,這樣程序就會在主窗口當中去尋找可能的鍵盤相應事件,否則focus仍然在被選中的部件上,如某一選中的控件,這一點很重要。 那么,是不是這樣就可以了呢,答案是否定的,在這個響應事件當中,必須要注意時刻的選取。因為焦點會隨著鼠標的點擊或其他某種方式而改變,如選中某控件后,并不立即按下delete鍵刪除,繼續點擊其他選項,這時再按delete的話,并不能實現刪除的功能。這樣會使系統因為找不到事件的目標而不起作用。就如一輛車在十字路口的時候不選擇轉彎,等到沒有岔路口的時候又要求車轉彎一樣,已經散失了原有實現的條件。因此,這里必須要注意加入setFocus()語句的位置。程序員可以選擇選中控件后的這一時刻,將焦點設置在主窗口,或者在鼠標左鍵點擊某一控件這一事件后,立即運行setFocus()這一語句,從而使焦點在活動窗口上,系統能夠在整個窗口內尋找可能要發生的響應鍵盤輸入事件。 說到這,我一直沒有再說上面提到的this給我帶來的困擾是什么。因為這其實只是對C++還不是很熟悉的朋友而言的,并非整個事件的障礙。在我本人修改和調試程序的過程中,因為還不是很懂得this的使用,雖然知道需要調用setFocus()這一函數,但如何調用,其實現方式卻很難達成,屬于“巧婦有米無柴也難炊”的狀況。后來知道了this的使用后,問題才得以迎刃而解。其實很簡單,如果是調用類,且實現刪除功能的語句就在活動窗口類當中,這時只需要使用this->setFocus();即可?,F在回過頭再去看的時候,卻又是那么簡單。
轉載于:https://blog.51cto.com/sunshine1106/299677
總結
以上是生活随笔為你收集整理的响应键盘delete键的删除功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bBank Demo 演示(最后更:20
- 下一篇: 相关及其快速算法的C++实现