音量调节弹窗 自定义组件qt

  1. Qt::Popup 无边框,无标题栏

模态行为:点击窗口外部,窗口自动关闭

  1. Qt::FramelessWindowHint

无边框

复制代码
volumeSlider::volumeSlider(QWidget *parent) : QWidget(parent, Qt::Popup | Qt::FramelessWindowHint)
  1. Qt::WA_WindowPropagation 弹窗事件可以传递给父窗口

配合Qt::Popup 处理父子层级、焦点传递、防止弹窗莫名消失

setAttribute(Qt::WA_WindowPropagation);

复制代码
volumeSlider::volumeSlider(QWidget *parent) : QWidget(parent, Qt::Popup
            | Qt::FramelessWindowHint)
{
    setAttribute(Qt::WA_WindowPropagaion);

    QVBoxLayout *vbox = new QVBoxLayout(this);
    setLauoyt(vbox);

    QSlider *slider = new QSlider(this);
    slider->setRange(0, 100);
    slider->setValue(50);
    vbox->addWidget(slider);

    vbox->setContentsMargins(12, 12, 12, 12);

    setFixedSize(240, 80);
    connect(slider, &QSlider::sliderReleased, this, [this, slider](){
        int value = slider->value();
        emit sendValue(value);
    });

}

void volumeSlider::showAboveWidget(QWidget *btn)
{
    QPoint globalPos = btn->mapToGlobal(QPoint(0, 0));
    int x = globalPos.x() + btn->width() - width();
    int y = globalPos.y() - 80;
    
    this->move(x,y);
    this->show();
}

qss

复制代码
/* ==========8. volumeSlider弹窗(volumeSlider类,Qt::Popup 弹窗)内部的音量滑块 ========== */
/* volumeSlider 是QWidget,弹窗顶层,它内部的水平QSlider,没有objectName,用后代选择器 */
volumeSlider QSlider::groove:horizontal {
    height:5px;
    background:#cccccc;
    border-radius:2px;
}
volumeSlider QSlider::handle:horizontal {
    width:10px;
    height:12px;
    margin:-3px 0;
    background:#222222;
    border-radius:5px;
}
volumeSlider QSlider::sub-page:horizontal {
    background:#27ae60;
}

/* 音量弹窗本身的背景,volumeSlider继承QWidget */
volumeSlider{
    background-color:#f7f7f7;
    border:1px solid #bbbbbb;
    border-radius:6px;
}
相关推荐
2501_944521594 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
行思理5 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu1146 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
初阳7856 小时前
【基于Qt5仿音乐播放器(六)】——细节打磨与总结
qt·1024程序员节
程序 代码狂人7 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
meiying88389 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
@大迁世界9 小时前
告别 Go,拥抱 Rust
开发语言·golang·rust
SEO_juper9 小时前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
学逆向的9 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
低调滴开发10 小时前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust