2014-11-06 306 views
1

我有一個QPushButton,我正在通過樣式表對邊框圖像進行樣式設置。但是,由於未使用抗鋸齒技術繪製圖像,圖像質量很差。爲QPushButton啓用抗鋸齒功能

有沒有什麼辦法可以在沒有子類化的情況下啓用抗鋸齒功能?QPushButton並給它一個新的畫家?我不想那樣做,因爲我廣泛使用樣式表,並且必須創建一堆QProperties來模擬現有的僞狀態功能。

回答

1

您通常可以使用setRenderHints方法在QPainter對象上設置Anti-aliasing flag。這通常通過子類化widget和覆蓋paintEvent來完成。

根據Qt的Docs for QPainter

...當paintdevice是一個小部件,QPainter的只能一個的paintEvent()函數內或在一個通過的paintEvent()...

調用的函數使用的

如果沒有子類,您將被限制爲使用Event Filter攔截paintEvent並自己設置標誌。

您將需要創建一個覆蓋對象的事件處理程序的類。本課程將使用QObject::installEventFilter進行安裝。這個類需要過濾事件來處理你關心的特定事件(QPaintEvent)。然後它將需要創建一個QPainter對象,該對象接受源對象(使用第二個constructor)作爲其設備,如qtforum post所示。這是可行的,因爲QWidget繼承自QPaintDevice。

... 
myView::handlePaintEvent(QObject *obj, QEvent *eve) 
{ 
    QPainter painter(static_cast<QWidget *>(obj)); 
} 
... 

從這裏你應該能夠設置適當的渲染提示,你需要他們是什麼。

這個相同的事件過濾器類可以安裝在衆多對象上,因此可以非常快速地添加相同的功能,而不需要創建任何其他控件的子類。