• Qt 自定义长条进度条(类似播放器进度条)


    1.运行界面

    2.步骤

    其实很简单。

    2.1绘制底图圆角矩形

    2.2绘制播放进度圆角矩形

    参考:painter绘图

    3.源码

    1. #pragma once
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. class WProgressBar : public QWidget
    10. {
    11. Q_OBJECT
    12. public:
    13. WProgressBar(QWidget *parent = nullptr);
    14. ~WProgressBar();
    15. signals:
    16. void sigCustomSliderValueChanged(double pos);//自定义的鼠标单击信号,用于捕获并处理
    17. public:
    18. //获取pos
    19. double getPos();
    20. public slots:
    21. //设置0~1
    22. void slotSetValue(double pos);
    23. protected:
    24. void mousePressEvent(QMouseEvent *ev);
    25. void mouseMoveEvent(QMouseEvent *ev);
    26. void mouseReleaseEvent(QMouseEvent *ev);
    27. void paintEvent(QPaintEvent *);
    28. private:
    29. double m_pos = 0;
    30. };
    31. #include "WProgressBar.h"
    32. WProgressBar::WProgressBar(QWidget *parent)
    33. : QWidget(parent)
    34. {
    35. this->setWindowFlags(Qt::FramelessWindowHint); //隐藏窗口
    36. this->setAttribute(Qt::WA_TranslucentBackground, true); //窗口透明
    37. }
    38. WProgressBar::~WProgressBar()
    39. {
    40. }
    41. double WProgressBar::getPos()
    42. {
    43. return m_pos;
    44. }
    45. void WProgressBar::slotSetValue(double pos)
    46. {
    47. m_pos = pos;
    48. update();
    49. }
    50. void WProgressBar::mousePressEvent(QMouseEvent *ev)
    51. {
    52. //double pos = (double)ev->pos().x() / (double)width();
    53. //if (pos >= 1)
    54. // pos = 1;
    55. //if (pos <= 0)
    56. // pos = 0;
    57. //m_pos = pos;
    58. //update();
    59. //qDebug() << "seek pos = " << pos;
    60. //emit sigCustomSliderValueChanged(pos);
    61. }
    62. void WProgressBar::mouseMoveEvent(QMouseEvent *ev)
    63. {
    64. double pos = (double)ev->pos().x() / (double)width();
    65. if (pos >= 1)
    66. pos = 1;
    67. if (pos <= 0)
    68. pos = 0;
    69. m_pos = pos;
    70. update();
    71. }
    72. void WProgressBar::mouseReleaseEvent(QMouseEvent *ev)
    73. {
    74. double pos = (double)ev->pos().x() / (double)width();
    75. emit sigCustomSliderValueChanged(pos);
    76. }
    77. void WProgressBar::paintEvent(QPaintEvent *e)
    78. {
    79. QWidget::paintEvent(e);
    80. QPainter painter(this);
    81. painter.setRenderHint(QPainter::Antialiasing);
    82. //绘制底图矩形
    83. QBrush brush;
    84. brush.setColor(QColor(233,233,233));
    85. brush.setStyle(Qt::SolidPattern);
    86. painter.setBrush(brush);
    87. painter.drawRoundedRect(this->rect(), 5, 5);
    88. //绘制播放进度
    89. QLinearGradient radial;
    90. radial.setStart(0, 0);
    91. radial.setFinalStop(0, 1);
    92. //设置起始点颜色,0表示起始
    93. radial.setColorAt(0, QColor("#87CEFA"));
    94. //设置终点颜色 1表示终点
    95. radial.setColorAt(1, QColor("#1E90FF"));
    96. //设置延展方式
    97. radial.setSpread(QGradient::PadSpread);
    98. QPen pen(QBrush("#1E90FF"), 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
    99. painter.setPen(pen);
    100. //设置画刷
    101. painter.setBrush(radial);
    102. QRect rect = this->rect();
    103. rect.setWidth(rect.width() * m_pos);
    104. //画矩形
    105. painter.drawRoundedRect(rect, 5, 5);
    106. }

    4.应用截图

    一款自己做的播放器界面截图

    5.绘图参考

    1.圆形进度条实现

    2.麦克风音量大小模拟

    3.自定义时钟

    4.自定义圆形进度条

  • 相关阅读:
    3.JMeter高级使用-让你与众不同
    加州法案提议在州一级监管人工智能
    今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···
    C++ - 一些特殊类的设计
    上市公司高管断裂带数据-ASW&FLS-附计算代码和文献
    python之格式化输出format()函数使用总结
    如何申请高新技术企业认证?企业到底需要多少专利?
    计算机栈stack存在的意义
    java虚拟机详解篇二(类字节码详解)
    zookeeper+kafka
  • 原文地址:https://blog.csdn.net/wzz953200463/article/details/136400158