我有一個QPushButton
,我正在通過樣式表對邊框圖像進行樣式設置。但是,由於未使用抗鋸齒技術繪製圖像,圖像質量很差。爲QPushButton啓用抗鋸齒功能
有沒有什麼辦法可以在沒有子類化的情況下啓用抗鋸齒功能?QPushButton
並給它一個新的畫家?我不想那樣做,因爲我廣泛使用樣式表,並且必須創建一堆QProperties來模擬現有的僞狀態功能。
我有一個QPushButton
,我正在通過樣式表對邊框圖像進行樣式設置。但是,由於未使用抗鋸齒技術繪製圖像,圖像質量很差。爲QPushButton啓用抗鋸齒功能
有沒有什麼辦法可以在沒有子類化的情況下啓用抗鋸齒功能?QPushButton
並給它一個新的畫家?我不想那樣做,因爲我廣泛使用樣式表,並且必須創建一堆QProperties來模擬現有的僞狀態功能。
您通常可以使用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));
}
...
從這裏你應該能夠設置適當的渲染提示,你需要他們是什麼。
這個相同的事件過濾器類可以安裝在衆多對象上,因此可以非常快速地添加相同的功能,而不需要創建任何其他控件的子類。