0
在QWidget中,鼠標和繪畫以及其他事件都是虛擬函數而不是信號,因此它們將被重載。爲什麼會出現這種情況,而不是一致?爲什麼Qt有時會使用虛擬函數代替信號?
在QWidget中,鼠標和繪畫以及其他事件都是虛擬函數而不是信號,因此它們將被重載。爲什麼會出現這種情況,而不是一致?爲什麼Qt有時會使用虛擬函數代替信號?
雖然我無法找到Qt的文件,指出他們的動機,使用虛函數的事件中任何東西,我可以猜到:
QWidget
發出的信號從設計的角度來看可能沒有意義。如果我從QWidget
創建自己的小部件,爲什麼從我的小部件發出的信號只是連接回小部件本身的插槽?這也有破壞封裝的危險,因爲信號總是「公開」的。即使以上都不是這樣,但嘗試使用事件信號仍然會引發很多體系結構問題。例如,單個事件通常會傳遞給多個不同的對象(例如,在某些對象不希望處理事件的情況下)。在這種情況下,哪個對象發出指示事件發生的信號?它肯定不是事件的目標(即上面暗示的小部件)。它必須是其他一些全球性的對象。但是如果這是真的,我們可能會在每個小部件上實施虛擬插槽來處理信號。這實質上只是讓我們回到我們開始使用虛擬功能的地方!
所以,當你使用'QWidget'作爲基類時,你可以定義自己的'paintEvent'函數嗎? –
當然,但不能通過與畫家提供連接插槽的信號來實現嗎?我唯一能想到的就是paintEvent需要在eventLoop的特定時間被調用,但我不明白這是如何應用於mouseEvent或其他類似事件的。 –