2013-11-04 18 views
2

我有,我定義我的樣式表像這樣我的自定義部件:如何強制僞狀態在小部件

QWidget#this { background-color: red; } 
QWidget#this:hover { background-color: yellow; } 

這當我將鼠標懸停在小部件的工作原理,但我沒有這個當我將第一個小部件拖到另一個小部件時的行爲。

我已經捕獲了DragMove事件,但無法弄清楚發送類似mouseHover事件(MouseMove事件似乎不起作用)。

這可能嗎?當我拖動另一個小部件時,是否有另一種方式來使用樣式表?

+0

你試過'QWidget :: dragEnterEvent()'嗎? – vahancho

+0

好吧,我在Stylesheets中實現了這個行爲,所以我想用同樣的方法解決它。使用dragEnterEvent我可以捕獲事件,但無法將樣式表更改爲指定的懸停僞狀態 –

回答

3

幾天前我面臨同樣的問題。嘗試定義窗口小部件的自定義屬性,像和使用條件的樣式表中:

QWidget#this[dragging=true]{ 
    background-color: red; 
} 

也許你會需要更改自定義屬性後使用QStyle::polish(),以刷新你的widget樣式。

我希望這可以幫助你。

+0

感謝您的建議!但是這並不能解決我的問題,因爲當我收到dragEnter和dragLeave事件時,我將不得不手動設置該屬性(並取消設置)。懸停僞事件的美妙之處在於它被自動調用,這就是爲什麼我想要使用它。不管怎麼說,還是要謝謝你! –

+0

在style() - > polish(this)方法的末尾爲樣式化窗口小部件調用paintEvent(樣式表引用中的QWidget文檔中提供了4行代碼),它爲我工作! – darkgaze