音量调节弹窗 自定义组件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;
}
相关推荐
郑州光合科技余经理1 天前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
weixin199701080161 天前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
传奇开心果编程1 天前
【Rust入门知识点学与练】第24课:Trait 基础
开发语言·学习·rust
lqj_本人1 天前
WinPcap 鸿蒙 PC 适配全记录:从 NPF 原始抓包到 VPN_TUN 与 libpcap 双通路
qt·华为·harmonyos
言乐61 天前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
金金计较.1 天前
Go语言-3
java·开发语言·golang
张小凡vip1 天前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
Quz1 天前
QML StackView:三种入栈方式(Item、Component 与 URL)
qt
Wang's Blog1 天前
Java框架快速入门: Spring Security+OAuth2之云服务集成与多因子认证设计
java·开发语言·spring
Quz1 天前
QML StackView:入栈、出栈、替换与批量操作
qt