Qt踩坑系列---paintEvent

踩坑背景:

自定义了一个Widget,重写父类的paintEvent事件,主界面调用,没什么问题啊,但是运行就是添加不上这个小控件,折腾一上午才发现问题

解决办法:

没有重写 sizeHintminimumSizeHint 方法,所以它的默认大小可能是 0x0。这可能导致即使将 自定义控件添加到布局中,也无法正确显示。

重写 sizeHintminimumSizeHint 方法,给出一个合适的默认大小,解决~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,QSlider控件是继承自QWidget类的,QWidget类中并没有QSS属性"border-radius"。所以,使用 QSS 的 "border-radius" 属性无法直接应用到 QSlider 控件上。 但是,我们可以通过重写 QSlider 的 paintEvent() 函数,来实现圆角效果。具体步骤如下: 1. 继承 QSlider 类,创建一个新的自定义类 CustomSlider; 2. 重写 CustomSlider 的 paintEvent() 函数; 3. 在 paintEvent() 函数中,创建一个 QPainter 对象,使用该对象绘制圆角矩形背景; 4. 将绘制好的背景设置为 CustomSlider 的背景。 下面是示例代码: ```cpp class CustomSlider : public QSlider { public: CustomSlider(QWidget *parent = nullptr) : QSlider(parent) { } protected: void paintEvent(QPaintEvent *event) override { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QRect rect = QRect(0, 0, width(), height()); int radius = rect.height() / 2; // 绘制圆角矩形背景 QBrush brush(QColor(200, 200, 200)); painter.setBrush(brush); painter.drawRoundedRect(rect, radius, radius); // 绘制滑块 QRect sliderRect = QRect(0, height() / 2 - 10, 20, 20); painter.setBrush(QColor(0, 0, 0)); painter.drawEllipse(sliderRect); setStyleSheet("QSlider::groove:horizontal {background: transparent;}"); } }; ``` 在上面的代码中,我们创建了一个新的自定义类 CustomSlider,继承自 QSlider。在 CustomSlider 中,我们重写paintEvent() 函数,使用 QPainter 绘制了圆角矩形背景,并将绘制好的背景设置为 CustomSlider 的背景。最后,我们还设置了一个 QSS 样式,将 QSlider 的滑轨的背景设置为透明。 这样,就能够在 QSlider 控件上实现圆角效果了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值