• 7435阅读
  • 5回复

【提问】qt4的程序到qt3不能用了 [复制链接]

上一主题 下一主题
离线avacool
 
只看楼主 倒序阅读 楼主  发表于: 2005-11-02
我在windows xp下用qt4写的以下代码是工作正常的
  1. void QzBoard::paintEvent(QPaintEvent* event)
  2. {
  3.      QPainter painter(this);
  4.      //grid
  5.      for(int i=0;i<ITEMNUMX;i++)
  6.      {
  7.            for(int j=0;j<ITEMNUMY;j++)
  8.            {
  9.                  if((i+j)%2)
  10.                  {
  11.                        painter.drawPixmap(i*ITEMWIDTH,j*ITEMHEIGHT,ITEMWIDTH,ITEMHEIGHT,m_tileOdd);
  12.                  }
  13.                  else
  14.                  {
  15.                        painter.drawPixmap(i*ITEMWIDTH,j*ITEMHEIGHT,ITEMWIDTH,ITEMHEIGHT,m_tileEven);
  16.                  }
  17.            }
  18.      }
  19.      if(m_bPlaying)
  20.      {
  21.            //items
  22.            for(int i=0;i<ITEMNUMX;i++)
  23.            {
  24.                  for(int j=0;j<ITEMNUMY;j++)
  25.                  {
  26.                        painter.drawPixmap(m_crdnt[i][j].x,m_crdnt[i][j].y,m_size[i][j].w,m_size[i][j].h,*m_pItem[i][j]);      
  27.                  }
  28.            }
  29.            //set cursor to the current focus item
  30.            if(!m_bMoving && curX != -1 && curY != -1)
  31.            {
  32.                  painter.drawPixmap(curX*ITEMWIDTH,curY*ITEMHEIGHT,ITEMWIDTH,ITEMHEIGHT,m_cursor);
  33.            }
  34.      }
  35.      painter.end();
  36. }


换到红帽9下,改成如下样子

  1. void QzBoard::paintEvent(QPaintEvent* event)
  2. {
  3.      QPainter painter;
  4.               painter.begin(this);
  5.      ////grid
  6.      for(int i=0;i<ITEMNUMX;i++)
  7.      {
  8.            for(int j=0;j<ITEMNUMY;j++)
  9.            {
  10.                  if((i+j)%2)
  11.                  {
  12.                        painter.drawTiledPixmap(i*ITEMWIDTH,j*ITEMHEIGHT,ITEMWIDTH,ITEMHEIGHT,m_tileOdd);
  13.                  }
  14.                  else
  15.                  {
  16.                        painter.drawTiledPixmap(i*ITEMWIDTH,j*ITEMHEIGHT,ITEMWIDTH,ITEMHEIGHT,m_tileEven);
  17.                  }
  18.            }
  19.      }
  20.      if(m_bPlaying)
  21.      {
  22.            //items
  23.            for(int i=0;i<ITEMNUMX;i++)
  24.            {
  25.                  for(int j=0;j<ITEMNUMY;j++)
  26.                  {
  27.                        painter.drawTiledPixmap(m_crdnt[i][j].x,m_crdnt[i][j].y,m_size[i][j].w,m_size[i][j].h,*m_pItem[i][j]);      
  28.                  }
  29.            }
  30.            //set cursor to the current focus item
  31.            if(!m_bMoving && curX != -1 && curY != -1)
  32.            {
  33.                  painter.drawTiledPixmap(curX*ITEMWIDTH,curY*ITEMHEIGHT,ITEMWIDTH,ITEMHEIGHT,m_cursor);
  34.            }
  35.      }
  36.      painter.end();
  37. }


不能正常工作了. grid那块能显示,可items那块就显示不出来.

我猜可能是双buffer的问题,可是,我不会-_-##

哪位兄弟指教我一下.
离线avacool
只看该作者 1楼 发表于: 2005-11-02
知道了 真是郁闷

我这里用的Qt4里面的QPainter::drawPixmap(...)是个缩放显示的函数
我以为Qt3的这个QPainter::drawTiledPixmap(...)是一样的
不想它并不缩放
而我用的图片太大,边上又是透明的.
所以就好象没显示出来一样. -_-###

现在的问题是换用Qt3里面的那个QPainter::drawPixmap(const QRect &, QPixmap &)缩放显示的时候,窗口刷新极其之慢,是我没用对?

之外,谁能给我介绍一个能够保存图片透明的图象转换工具? 把图象缩小
我用Irfan view转换出来,透明的地方都变成了黑色的...

[p:4]
离线youngki
只看该作者 2楼 发表于: 2005-11-02
我想知道从哪找透明的图片阿
知识和财富,只在流通中产生价值
离线youngki
只看该作者 3楼 发表于: 2005-11-02
我想知道从哪找透明的图片阿
知识和财富,只在流通中产生价值
离线avacool
只看该作者 4楼 发表于: 2005-11-03
没找到能保存透明部分的批量转换工具
只好用photoshop一张一张另存为,真辛苦

透明的图片,,,,,我也不知道哪里找,我用的是从别人的SVG图象转换过来的PNG格式
离线avacool
只看该作者 5楼 发表于: 2005-11-03
Qt3里面每次重绘窗口还是闪得厉害,晕....
快速回复
限100 字节
 
上一个 下一个