【QT开发实操】-----paintEvent事件不生效

发现问题:在paintEvent事件中画图并未生效

预期结果:

实际结果:

paintEvent事件代码如下:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    painter.setBrush(Qt::white);
    painter.drawRect(ui->widget_video->x(),ui->widget_video->y(),
            ui->widget_video->width(),ui->widget_video->height());

    //自适应屏幕大小
    QImage img = m_image.scaled(ui->widget_video->size(),Qt::IgnoreAspectRatio);

    painter.drawImage(ui->widget_video->x(),ui->widget_video->y(),img);
}

样式表设置如下:

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 控件上实现圆角效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值