• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: 其他
  • 标签: Qt  声波  

资源简介

基于Qt的声波图形界面的动态绘制,底层使用图片递增绘制,内存使用最少,效率最高。

资源截图

代码片段和文件信息

#include “CSoundWave.h“
#include 
#include 
#include ylePainter>
#include 
#include 
CSoundWave::CSoundWave(const unsigned int nTickTime/*设置跳动频率毫秒*/ const unsigned int &nRedrawSpacesQWidget *parent) :
    QWidget(parent)
{
    m_nTickTime = nTickTime;
    m_nSpaces = nRedrawSpaces;
    m_bInited = false;
    m_bAutoWave = false;

    m_brush = QBrush(Qt::white);
    m_brushBackGround= QBrush(Qt::black);
    m_drawTimer = new QTimer;
    connect(m_drawTimer SIGNAL(timeout())thisSLOT(newLine()));
    m_nMaxValue = 1000;
    m_backColor =QColor(888888);
    m_penColor = QColor(33 3333);
}

void CSoundWave::enableAutoWave(bool bAutoWave)
{
    if (bAutoWave)
    {
        m_drawTimer->start(m_nTickTime);
    }
    else
    {
        m_drawTimer->stop();
    }
}

void CSoundWave::setTickParamers(const unsigned int &nTickTime/*设置跳动频率*/ const unsigned int &nRedrawSpaces/*设置间隙,声波中采用1个像素*/)
{

}

void CSoundWave::setMaxValue(const unsigned int&  nMaxValue)
{
    m_nMaxValue = nMaxValue;
}
void CSoundWave::addNewSoundValue(const unsigned int&  nNewSound)

{
    _addNewSound(nNewSound % m_nMaxValue);
}
void CSoundWave::newLine()
{
    _addNewSound(qrand() % m_nMaxValue);
}

void CSoundWave::_addNewSound(const unsigned int &value)
{
    QRect rc = this->rect();
    unsigned int nHeight = rc.height() * value /(float)m_nMaxValue;
    unsigned int nStartY = (rc.height() - nHeight) / 2;
    if (!m_bInited)
    {
        waveImg = QPixmap(rc.width() rc.height());
        waveImg.fill(m_backColor);
        m_bInited = true;
    }
    QPainter painter2(&waveImg);
    painter2.setBrush(m_brush);
    painter2.setPen(m_penColor);

    QPainter painterTemp(&waveImgTemp);
    painterTemp.setBrush(m_brush);
    painterTemp.setPen(m_penColor);
    painterTemp.fillRect(rect() m_backColor);

    QRect newRc = waveImg.rect();

    painterTemp.drawPixmap(QRect(00 newRc.width() - m_nSpaces newRc.height()) waveImg QRect( m_nSpaces0 newRc.width()- m_nSpaces newRc.height()));

    painterTemp.drawLine(QPoint(rc.topRight().x() rc.topRight().y() + nStartY)QPoint(rc.bottomRight().x() rc.bottomRight().y() - nStartY));

    painter2.fillRect(rect() m_backColor);
     painter2.drawPixmap(QRect(00 newRc.width() newRc.height()) waveImgTemp QRect( 00 newRc.width() newRc.height()));

    update();
}

void CSoundWave::paintEvent(QPaintEvent *ev)
{
    QRect rc = this->rect();
    if (!m_bInited)
    {
        waveImg = QPixmap(rc.width() rc.height());
        waveImg.fill(m_backColor);
        waveImgTemp = QPixmap(rc.width() rc.height());
        waveImgTemp.fill(m_backColor);
        m_bInited = true;
    }

    QPainter painter(this);
    painter.drawPixmap(00 waveImg);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-03-14 11:56  CSoundWaveTest\
     文件        2912  2016-03-14 14:06  CSoundWaveTest\CSoundWave.cpp
     文件        1280  2016-03-14 14:02  CSoundWaveTest\CSoundWave.h
     文件         400  2016-03-14 11:53  CSoundWaveTest\CSoundWaveTest.pro
     文件       18303  2016-03-14 11:56  CSoundWaveTest\CSoundWaveTest.pro.user
     文件         183  2016-03-10 15:04  CSoundWaveTest\main.cpp
     文件         382  2016-03-14 11:53  CSoundWaveTest\mainwindow.cpp
     文件         288  2016-03-14 09:53  CSoundWaveTest\mainwindow.h

评论

共有 条评论