音量调节弹窗 自定义组件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;
}
相关推荐
Java后端的Ai之路41 分钟前
05、Python单例模式完全指南
开发语言·人工智能·python·单例模式·oracle
多弗朗皮卡丘1 小时前
C语言梦开始的地方16:结构体
c语言·开发语言·windows
x861 小时前
Go 1.27 正式发布:泛型方法、encoding/json/v2、后量子签名 ML-DSA 与 SIMD
开发语言·golang
杨丰玮4181 小时前
暑假Java知识点回顾:类与对象知识总结
java·开发语言
Patrick在香港2 小时前
Python asyncio vs 多线程 vs 多进程——同一份 HKOpenDataClient 实测 5/30/100 endpoint,谁是真的银弹
开发语言·python
牛油果子哥q2 小时前
C++异常处理万字详解:try-throw-catch机制、栈展开、标准异常体系、自定义异常、工程规范、内存泄漏避坑
开发语言·jvm·c++
Metaphor6922 小时前
使用 Python 设置 Excel 文件属性
开发语言·python·excel
艾莉丝努力练剑2 小时前
【AI大模型接入SDK】C++日志体系与spdlog封装的理论部分
开发语言·c++·ide·人工智能·学习·面试·trae
dear_bi_MyOnly2 小时前
C语言控制语句与循环逻辑精讲
c语言·开发语言·学习·分类