qt slidervertical qborder-radius属性来实现圆角效果不生效
时间: 2023-11-15 07:07:39 浏览: 81
在 Qt 中,`QSlider` 的圆角效果可以使用 `QProxyStyle` 类来实现。首先,需要创建一个新的 `QProxyStyle` 类,并重写 `drawComplexControl` 函数来绘制 `QSlider` 的背景。在此函数中,可以使用 `QPainterPath` 类来创建一个圆角矩形,并使用 `QPainter` 类的 `fillPath` 函数来填充该矩形。然后,将新的 `QProxyStyle` 类设置为 `QSlider` 的样式,即可实现圆角效果。
以下是一个示例代码:
```cpp
#include <QApplication>
#include <QProxyStyle>
#include <QPainter>
#include <QPainterPath>
#include <QStyleOptionSlider>
#include <QSlider>
class SliderStyle : public QProxyStyle {
public:
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override {
if (control == CC_Slider && option->subControls == SC_SliderHandle && qobject_cast<const QSlider *>(widget)) {
painter->save();
painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(Qt::NoPen);
QRectF handleRect = subControlRect(control, option, SC_SliderHandle, widget);
qreal radius = handleRect.width() / 2;
QPainterPath path;
path.addRoundedRect(handleRect, radius, radius);
painter->fillPath(path, option->palette.background());
painter->restore();
} else {
QProxyStyle::drawComplexControl(control, option, painter, widget);
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSlider slider(Qt::Vertical);
slider.setRange(0, 100);
slider.setValue(50);
SliderStyle style;
slider.setStyle(&style);
slider.show();
return a.exec();
}
```
在该示例代码中,我们创建了一个 `SliderStyle` 类,重写了 `drawComplexControl` 函数来绘制圆角矩形。然后将该样式设置为 `QSlider` 的样式。运行该示例代码,即可看到圆角效果。
阅读全文