• 4324阅读
  • 3回复

QT画图颜色影响问题 [复制链接]

上一主题 下一主题
离线lzpmail
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-30
  1.     for (short j=0; j<2; ++j)
  2.     {
  3.         tempX[j] = m_LastPosX[j] * fXInterval;
  4.         tempY[j] = m_LastPosY[j];
  5.         pen.setColor(m_colorGraphic[j]);
  6.         pCanvas.setPen(pen);
  7.         i = 0;
  8.         paintPath.moveTo(tempX[j], tempY[j]);
  9.         while(i < nStep)
  10.         {
  11.             ++m_LastPosX[j];
  12.             nowX[j] = m_LastPosX[j] * fXInterval;
  13.             if (nowX[j] >= fWidth)
  14.             {
  15.                 m_LastPosX[j] = 0;
  16.                 tempX[j] = m_LastPosX[j];
  17.                 beforeX = 0;
  18.                 nowX[j] = (++m_LastPosX[j]) * fXInterval;
  19.                 paintPath.moveTo(tempX[j], tempY[j]);
  20.                 pCanvas.fillRect(0, 0, (int)nStep*fXInterval+15, halfHeight*2, brush);
  21.             }
  22.             m_LastPosY[j] = ((halfHeight/2) - CalculateVaule(m_pGraphicData[j][i])) + j*halfHeight+j;
  23.             if (m_LastPosY[j] < 0)
  24.                 m_LastPosY[j] = 0 + j*halfHeight+j;
  25.             else if (m_LastPosY[j] > (halfHeight + j*halfHeight+j))
  26.                 m_LastPosY[j] = halfHeight + j*halfHeight+j;
  27.             paintPath.lineTo(nowX[j], m_LastPosY[j]);
  28.             tempX[j] = nowX[j];
  29.             tempY[j] = m_LastPosY[j];
  30.             ++i;
  31.         }
  32.         pCanvas.drawText(16, 16 + j*halfHeight, m_strTitle[j]);
  33.         if(m_bDrawmV[j])
  34.         {
  35.             float fPosX = width()*7;
  36.             int lineHeight = (480*10*gain[j])/135;
  37.             fPosX /= 8.0;
  38.             pCanvas.drawLine(fPosX, (halfHeight/2) -(lineHeight/2) + j*halfHeight,
  39.                              fPosX, (halfHeight/2) +(lineHeight/2) + j*halfHeight);
  40.             pCanvas.drawText(fPosX+2, (halfHeight/2) +(lineHeight/2) + j*halfHeight, "1mV");
  41.         }
  42.         //在此处增加保存波形数据的代码,不然部分数据就要被删除了
  43.         memcpy(m_pGraphicData[j], &m_pGraphicData[j][nStep],                //把缓冲区中的数据向左移X位, 即会把前面的X位给覆盖
  44.                (*m_pGraphicDataCount[j]-nStep)*sizeof(unsigned short));
  45.         *m_pGraphicDataCount[j] = *m_pGraphicDataCount[j]-nStep;                    //把缓冲区中数据个数减少
  46.     }
  47.     pCanvas.drawPath(paintPath);
  48.     update((beforeX >= 5)?(beforeX-5):beforeX, 0, (int)nStep*fXInterval+15, halfHeight*2);

此段代码的目的是画出两个波形及与波形相关的名字,  且波形与波形名字的颜色是一样的. 但现在画出来的结果颜色不对, 波形1的名字显示的颜色是正确的, 但波形1波的颜色与波形2的相同(奇怪),  从代码来看, 我们是先画波形1, 且设置相应的颜色值, 此时波形2还在波形1的后面, 不知哪里影响了波形1, 我自己做了测试, 当只画波形1时波形的颜色与波形名字的颜色是对的, 只画波形2时也是对的, 但不知为什么同时画时会出这样的问题, 请高手帮帮忙哦, 谢了.
离线lzpmail
只看该作者 1楼 发表于: 2011-08-31
没有高手碰到类似的问题啊, 哎
离线lzpmail
只看该作者 2楼 发表于: 2011-08-31
我知道问题出在哪了, 问题在    pCanvas.drawPath(paintPath);这条语句, 由于画两条波形到画布上时用的是pCanvas的颜色决定, 而不是你用QPainterPath画时的颜色决定的, 所以最终就变成了两波形的颜色一样了。但现在我还不知怎么解决。
离线dwhome

只看该作者 3楼 发表于: 2011-08-31
提个建议,仅供参考:
不要for (j)循环,编个函数,把j作为参数传进去
将color作为参数传进去,在drawPath之前设置color
快速回复
限100 字节
 
上一个 下一个