当前位置: 代码迷 >> QT开发 >> Qt双缓冲+局部重绘总是不成功解决思路
  详细解决方案

Qt双缓冲+局部重绘总是不成功解决思路

热度:131   发布时间:2016-04-25 03:16:48.0
Qt双缓冲+局部重绘总是不成功
本帖最后由 sddsighhz 于 2014-07-14 15:33:54 编辑
直接上代码,帮忙看看哪里还有问题

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    this->setGeometry(100,100,480,320);
    m_pPixmap = QPixmap(12,320);
    m_pGlobal = QPixmap(64,32);

    m_pTimer = new QTimer();
    connect(m_pTimer,SIGNAL(timeout()),SLOT(onTimer()));
    m_pTimer->start(200);
    m_nIndex  = 0;
    m_rePaint = true;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter paint(this);
    if(m_rePaint)
    {
        paint.fillRect(0,0,480,320,QColor("red"));
        m_rePaint = false;
    }
    paint.drawPixmap(QPoint(0,0),m_pPixmap,rect);
}

void MainWindow::onTimer()
{
    m_pPixmap.fill(QColor("blue"));
    QPainter paint(&m_pPixmap);
    int n = qrand()%320;
    int m = qrand()%320;

    paint.drawLine(0,n,2,m);

    m_nIndex += 2;
    if(m_nIndex > 480)
        m_nIndex = 0;
     rect = QRect(m_nIndex,0,m_nIndex+2,320);

     repaint(rect);
}


最后运行,可以看到确实是局部刷新的,但是图像总是有问题呢?求帮忙解答
------解决方案--------------------
引用:
换个问题啊,Qt画心电图,我用双缓冲加局部绘图还是很占CPU,因为数据很多,要频繁刷新,有没有更高效一点方法来处理大量实时绘图?

有没有算法可以丢弃一部分数据呢。
另外这个频繁刷新,有没有一部分CPU的计算结果被浪费呢(并没有被界面绘制)?
------解决方案--------------------
引用:
换个问题啊,Qt画心电图,我用双缓冲加局部绘图还是很占CPU,因为数据很多,要频繁刷新,有没有更高效一点方法来处理大量实时绘图?


大量的实时绘图应该就类似于视频播放了吧?
不建议在QT中做,而是用DX或者其他的图形库。QT只需将窗口句柄传给绘图模块。
  相关解决方案