我想攔截QSlider上的QPaintEvent並繪製它。但是我無法找到關於物體幾何形狀的細節。我可以知道整個窗口小部件的rect(),但是怎樣才能知道第一個tickmark的位置或者窗口小部件矩形中最後一個的位置? (跟蹤頻道的左側和右側有空白)。或「手柄」的矩形?自定義繪圖的QSlider(Qt)
2
A
回答
5
感謝回覆中的提示。經過一番調查後,這似乎工作。對於情況下,如果是使用的人:
QStyleOptionSlider opt;
slider->initStyleOption(&opt);
QStyle *styl=style();
Rect rectHandle=styl->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, NULL);
Rect rectGroove=styl->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, NULL);
int avl=styl->pixelMetric(QStyle::PM_SliderSpaceAvailable, &opt, this); // width in an horizontal slider of the groove (width of widget - margins)
1
你是否確定要重新實現繪畫事件?
也許這將足以摧毀自定義樣式表?
下面是從doks qslider一個例子:
QSlider::groove:horizontal {
border: 1px solid #999999;
height: 8px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);
margin: 2px 0;
}
QSlider::handle:horizontal {
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);
border: 1px solid #5c5c5c;
width: 18px;
margin: -2px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */
border-radius: 3px;
}
1
你有沒有考慮過使用setStyleSheet呢? 如果你真的想自己繪製它,你可以看看它是如何在Qt源代碼中完成的:qt/src/gui/widgets/qslider.cpp
+0
感謝提示源,從那裏和一些測試,我可以找到我需要的一切。 – Joan
相關問題
- 1. QT QSlider邊距
- 2. QT自定義樹視圖
- 3. 繪圖自定義視圖
- 4. 優化自定義繪圖
- 5. 自定義NSWindow繪圖
- 6. 繪製自定義圖表
- 7. 使用Qt添加QSlider
- 8. 繪製自己的自定義視圖
- 9. 如何繪製一張圖片而不是Qt QSlider上的滑塊?
- 10. [Qt]自定義QTreeWidgetItem
- 11. 自定義Qt Dock
- 12. 自定義視圖不繪製位圖
- 13. Android:自定義列表視圖繪圖
- 14. Qt的自定義窗口
- 15. Qt中的自定義QDialog
- 16. 自定義渲染/繪圖的Python GUI
- 17. UIControl Subclass Clipping中的自定義繪圖
- 18. 自定義顏色的Matlab繪圖
- 19. 繪製自定義視圖中的線
- 20. Android的自定義視圖重繪
- 21. Qt C++將QSlider連接到QWebView的setTextSizeMultiplier
- 22. 如何在Qslider上的自定義地方放蜱?
- 23. 使用QT的圖片中的自由手繪線性繪圖
- 24. 使用自定義繪圖與MapView的奇怪繪圖artifact
- 25. WPF自定義控件與自定義繪圖和ActualWidth
- 26. Qt在自定義呈現的控件上繪製小'x'圖標
- 27. Qt繪圖行
- 28. Qt:定義自定義事件類型
- 29. 自定義導航繪圖器
- 30. Android如何重繪自定義視圖
謝謝,其實更容易爲我攔截Q漆,另外我想dinamically畫它,當其他值的變化重繪背景(上下文是色彩定義HSL,每個滑塊繪製可用色域取決於其他值) – Joan