• 6004阅读
  • 9回复

pictureflow怎么设置背景图片原来的是纯色背景 [复制链接]

上一主题 下一主题
离线zpzbc18
 
只看楼主 倒序阅读 楼主  发表于: 2012-02-27
关键词: zpzbc18求助
[attachment=undefined]代码在附件
离线kimtaikee

只看该作者 1楼 发表于: 2012-02-27
这得看你自己的功力修改它的源码,它本身没有这样的接口,不过也很简单,我曾经把它改成线性渐变的背景图


离线zpzbc18
只看该作者 2楼 发表于: 2012-02-28
给个思路啊
离线zpzbc18
只看该作者 3楼 发表于: 2012-02-28
我用paintEvent(QPaintEvent * e)
这个函数画了一个背景!!但是老是把要显示的图片给盖住了!!怎么改啊!!源代码是我在网上下的pictureflow-0.1.0pictureflow源代码 pictureflow.rar (13 K) 下载次数:22
离线robertkun

只看该作者 4楼 发表于: 2012-02-28
  应该修改图片的背景色吗.. 在buffer.fill(QColor);的地方改一下..very easy.

void PictureFlow::setBackgroundColor(const QColor& c)
{
  d->state->backgroundColor = c.rgb();
  triggerRender();
}
                                              简单的生活使人快乐!
离线zpzbc18
只看该作者 5楼 发表于: 2012-02-29
回 4楼(robertkun) 的帖子
不是改颜色啊!!是把背景换成图片
我在pictureflow类下边的paintEvent(QPaintEvent * e)
函数里边这样写了但是总是把要显示浏览的图片盖住了!!求解答
paintEvent(QPaintEvent * e)
{
  QImage image;
   image.load("/usr/qt/qt/fixme/resource/formmain/formmain.png");     //用QImage导入图片
  QPainter draw(this);        //创建QPainter,将指针传入该设备
  QRect rect(0,0,this->width(),this->height());  //创建绘图区域
   draw.drawImage(rect,image);  
}
离线kimtaikee

只看该作者 6楼 发表于: 2012-02-29
  1. // Render the slides. Updates only the offscreen buffer.
  2. void PictureFlowSoftwareRenderer::render()
  3. {
  4.   buffer.fill(state->backgroundColor);
  5.   renderSlides();
  6.   dirty = false;
  7. }

它保存了一个颜色是因为要跳虫buffer 这个QImage 然后再paintEvent 中
  1. void PictureFlowSoftwareRenderer::paint()
  2. {
  3.   if(!widget)
  4.     return;
  5.   if(widget->size() != size)
  6.     init();
  7.   if(state->backgroundColor != bgcolor)
  8.   {
  9.     bgcolor = state->backgroundColor;
  10.     surfaceCache.clear();
  11.   }
  12.   if((int)(state->reflectionEffect) != effect)
  13.   {
  14.     effect = (int)state->reflectionEffect;
  15.     surfaceCache.clear();
  16.   }
  17.   if(dirty)
  18.     render();
  19.   QPainter painter(widget);
  20.   buffer.load(":/images/bg.jpg"); // add customized bg image
  21.   painter.drawImage(QPoint(0,0), buffer);
  22. }

关于你的背景图片是平铺还是最适大小等策略你自己鼓捣吧


离线robertkun

只看该作者 7楼 发表于: 2012-02-29

void PictureFlowSoftwareRenderer::init()
{
  if(!widget)
    return;
  surfaceCache.clear();
  blankSurface = 0;
  size = widget->size();
  int ww = size.width();
  int wh = size.height();
  int w = (ww+1)/2;
  int h = (wh+1)/2;
#ifdef PICTUREFLOW_QT4
  buffer = QImage(ww, wh, QImage::Format_RGB32);
#endif
#if defined(PICTUREFLOW_QT3) || defined(PICTUREFLOW_QT2)
  buffer.create(ww, wh, 32);
#endif
  //buffer.fill(bgcolor);  // 把一些设置背景的地方注释掉,如这里

  rays.resize(w*2);
  for(int i = 0; i < w; i++)
  {
    PFreal gg = ((PFREAL_ONE >> 1) + i * PFREAL_ONE) / (2*h);
    rays[w-i-1] = -gg;
    rays[w+i] = gg;
  }
  // 添加下面的语句,绘制图片的背景
  QPainter painter(&buffer);
  painter.save();
  painter.setBrush(QBrush(QImage(":/s5.jpg")));
  painter.drawRect(buffer.rect());
  painter.restore();

  dirty = true;
}

                                              简单的生活使人快乐!
离线zpzbc18
只看该作者 8楼 发表于: 2012-02-29
谢谢各位大虾啊!!

只看该作者 9楼 发表于: 2014-03-17
    


要得到自己想要的结果,还是得修改源码,摸索一下,不太难!
博客地址:https://waleon.blog.csdn.net
微信公众号:高效程序员
QQ 群:242790253
微信群:加微信(iwaleon),邀请入群。

承接各种 C++/Qt/QML 项目,专业的团队,一流的服务,不二的选择!
快速回复
限100 字节
 
上一个 下一个