效果展示

- 鼠标位于音量图标区域内,显示出滑动条。鼠标移出音量图标区域内滑动条隐藏。
- 鼠标点击音量图标,如果此时音量为0,音量变成50,如果此时音量不为零,音量变为0。
CVolumeButton.h 音量图标头文件
#pragma once
#include <QtWidgets>
#include "CVolumeSliderDialog.h"
class CVolumeButton :
public QPushButton {
Q_OBJECT
public:
CVolumeButton(QWidget* p = nullptr);
~CVolumeButton();
protected:
void enterEvent(QEnterEvent* event) override;
void timerEvent(QTimerEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
private:
CVolumeSliderDialog* m_pVolumeSliderDlg = nullptr;
int m_timerId = -1;
bool m_isMute = false;
};
#include <QtWidgets>
是 Qt 库中用于引入所有与图形用户界面(GUI)相关控件的头文件。可以理解为是一个模块头文件,用这一个头文件就可以包含许多其他的头文件,和C++中的万能头文件#include<bits/stdc++>
有异曲同工之妙。通过 #include <QtWidgets>
,你可以一次性引入所有常用的 GUI 控件,而无需单独引入每个控件的头文件。它包含了大部分用于创建桌面应用程序的常见控件,比如 QMainWindow、QDialog、QPushButton 等。
- 重载了这三个函数事件,
enterEvent
是进入事件,也就是说当鼠标进入到空间区域内会触发的事件.timerEvent
是定时器事件,设置完毕定时器之后,每过一段事件就会触发一遍定时器内的函数逻辑.mousePressEvent
是鼠标按下事件,当鼠标按下按键之后,会触发的事件. void enterEvent(QEnterEvent* event) override;
void timerEvent(QTimerEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
CVolumeSliderDialog
是滑动条类,m_timerId
是定时器的ID,创建出一个定时器之后会返回一个定时器ID,m_isMute
用来判断音量是否不为0,也就是说判断是否有音量. CVolumeSliderDialog* m_pVolumeSliderDlg = nullptr;
int m_timerId = -1;
bool m_isMute = false;
CVolumeButton.cpp 音量图标源文件
#include "CVolumeButton.h"
CVolumeButton::CVolumeButton(QWidget* p)
:QPushButton(p) {
this->setFixedSize