使用dll API通过hDC绘制QPixmap非常慢

2022-01-28 05:17:10 标签 windowsqtdllgdiqpixmap

我有Hantek USB DSO,我正在写一个修改的软件,根据我的需要。

它以固定的间隔获取波形数据,然后调用小部件的update()方法。

在widget的painteevent中,它调用DLL的函数来绘制网格和波形。

通过这样做,它成功地绘制了波形。但问题是,它经常闪烁。因为它首先绘制背景(这是一个网格),然后是波形。

然后我读到这个

https://doc。qt。io/archives/qq/qq06-flicker-free。html

所以为了使它不闪烁,我选择了双缓冲的方法。

根据我的理解,我首先需要绘制网格和波形的QPixmap,然后绘制QPixmap到部件的painteevent。

这里是我的小部件的代码paintevent-

static QPixmap* buff= 0;
    QPainter painter;
    if (!buff) {buff = new QPixmap;}
    painter.begin(buff);
    HWND hWin=(HWND) buff->handle();
    dc=GetDC(hWin);
    if(hard->m_bDraw){
        //colletdata.stop();
        HTDrawGrid(dc,L,T,R,B,10,8,200,1);
        HTDrawWaveInYTVB(dc,L,T,R,B,255,255,0,0,hard->m_pSrcData[0],4096,2500,2048,hard->m_nLeverPos[0],1.0,1.0,0,0);
        hard->m_bDraw=false;
        hard->m_bStartC=true;
        Sleep(20);
        //colletdata.start();
    }
    painter.end();
    painter.begin(this);
    painter.drawPixmap(0, 0, *buff);
    painter.end();

此代码的输出也可以工作,但它有许多问题-

它吸引住。这意味着我可以看到HTDrawGrid如何逐行逐像素地绘制网格。

它非常慢。也许这就是我能看到它的原因。

它在形状外面画。(它在桌面使用)。

我是一个很新的Qt,我是一个vb程序员。有什么建议吗?

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码