在实现qt播放时,调用的mplayer,由于采用的是自定义绘图,用的是setAttribute(Qt::WA_TranslucentBackground);结果不能正常在上面显示播放画面,在默认皮肤下是没有问题的,决定用九宫格图片拉伸方式(效果如图)

附件图片:

文件:

tst2.rar

大小:

10KB

下载:

typedef struct RECTANGLE

{

int left;

int top;

int right;

int bottom;

RECTANGLE()

{

left = 0;

top = 0;

right = 0;

bottom = 0;

}

RECTANGLE(int _left, int _top, int _right, int _bottom)

{

left = _left;

top = _top;

right = _right;

bottom = _bottom;

}

} RectangleEx;

Form::Form()

{

RectangleEx margin(40, 30, 20, 20);

resize(350, 500);

QPalette p = palette();

QPixmap img("back.png");

QBitmap mask("backMask.png");

QPixmap imgAA = scaleEx(img, margin);;

QPixmap maskAA = scaleEx(mask, margin);;

QRect r = imgAA.rect();

QRect r2 = maskAA.rect();

p.setBrush(QPalette::Window, QBrush(imgAA));

setPalette(p);

setMask(maskAA);

setWindowFlags(Qt::FramelessWindowHint);

}

QPixmap Form::scaleEx(QPixmap &map,RectangleEx rect)

{

QPixmap rMap;

QRect fRect = frameGeometry();

QRect pRect = map.rect();

// for four corner rects of src

// 1. topLeft rect

QRect srcRect1 = QRect(0, 0, rect.left, rect.top);

// 2. topRight rect

QRect srcRect2 = QRect(pRect.width()-rect.right, 0, rect.right, rect.top);

// 3. bottomLeft rect

QRect srcRect3 = QRect(0, pRect.height()-rect.bottom, rect.left, rect.bottom);

// 4. bottomRight rect

QRect srcRect4 = QRect(pRect.width()-rect.right, pRect.height()-rect.bottom,

rect.right, rect.bottom);

QRect pSrcRectMid =  QRect(rect.left, rect.top,

pRect.width()-(rect.left+rect.right), pRect.height()-(rect.top+rect.bottom));

QRect pSrcRectMidTop = QRect(rect.left, 0, pRect.width()-(rect.left+rect.right), rect.top);

QRect pSrcRectMidBottom = QRect(rect.left,pRect.height()-rect.bottom,

pRect.width()-(rect.left+rect.right), rect.bottom);

QRect pSrcRectMidLeft = QRect(0, rect.top, rect.left,

pRect.height()-(rect.bottom+rect.top));

QRect pSrcRectMidRight = QRect(pRect.width()-rect.right,rect.top,

rect.right, pRect.height()-(rect.top+rect.bottom));

// for four corner rects of desc

// 1. topLeft rect

QRect descRect1 = QRect(0, 0, rect.left, rect.top);

// 2. topRight rect

QRect descRect2 = QRect(fRect.width()-rect.right, 0, rect.right, rect.top);

// 3. bottomLeft rect

QRect descRect3 = QRect(0, fRect.height()-rect.bottom, rect.left, rect.bottom);

// 4. bottomRight rect

QRect descRect4 = QRect(fRect.width()-rect.right, fRect.height()-rect.bottom,

rect.right, rect.bottom);

QRect pDescRectMid =  QRect(rect.left, rect.top,

fRect.width()-(rect.left+rect.right), fRect.height()-(rect.top+rect.bottom));

QRect fDescRectMidTop = QRect(rect.left, 0,

fRect.width()-(rect.left+rect.right), rect.top);

QRect fDescRectMidLeft = QRect(0, rect.top, rect.left,

fRect.height()-(rect.top + rect.bottom));

QRect pDescRectMidRight = QRect(fRect.width()-rect.right, rect.top,

rect.right, fRect.height()-(rect.top + rect.bottom));

QRect fDescRectMidBottom = QRect(rect.left, fRect.height()-rect.bottom,

fRect.width()-(rect.left+rect.right), rect.bottom);

QPixmap map1 = map.copy(srcRect1);

QPixmap map2 = map.copy(srcRect2);

QPixmap map3 = map.copy(srcRect3);

QPixmap map4 = map.copy(srcRect4);

QPixmap mapMid = map.copy(pSrcRectMid);

QPixmap mapMidLeft = map.copy(pSrcRectMidLeft);

QPixmap mapMidRight = map.copy(pSrcRectMidRight);

QPixmap mapMidTop = map.copy(pSrcRectMidTop);

QPixmap mapMidBottom = map.copy(pSrcRectMidBottom);

// new pixmap size

QPixmap mapMidNew(fRect.width(), fRect.height());

QPainter painter(&mapMidNew);

// for four corners

painter.drawPixmap(descRect1, map1, map1.rect());

painter.drawPixmap(descRect2, map2, map2.rect());

painter.drawPixmap(descRect3, map3, map3.rect());

painter.drawPixmap(descRect4, map4, map4.rect());

// mid and for four borders

painter.drawPixmap(pDescRectMid, mapMid, mapMid.rect());

painter.drawPixmap(fDescRectMidLeft, mapMidLeft, mapMidLeft.rect());

painter.drawPixmap(pDescRectMidRight, mapMidRight, mapMidRight.rect());

painter.drawPixmap(fDescRectMidTop, mapMidTop, mapMidTop.rect());

painter.drawPixmap(fDescRectMidBottom, mapMidBottom, mapMidBottom.rect());

//mapMidNew.save("kk02.png");

return mapMidNew;

}

Form::~Form()

{

}

补允一下,这是一个测试,若稍改进一点,应该有个类似结构:

typedef struct PIXMAPINFO

{

QRect rectTopLeft;

QRect rectTopRight;

QRect rectBottomLeft;

QRect rectBottomRight;

QRect rectMiddle;

QRect rectMidLeft;

QRect rectMidTop;

QRect rectMidRight;

QRect rectMidBottom;

QPixmap pixTopLeft;

QPixmap pixTopRight;

QPixmap pixBottomLeft;

QPixmap pixBottomRight;

QPixmap pixMid;

QPixmap pixMidLeft;

QPixmap pixMidTop;

QPixmap pixMidRight;

QPixmap pixMidBottom;

} PixmapInfo;

这样理解比较清晰一点

PixmapInfo src;

PixmapInfo desc;

问题:

1. 当切换不同皮肤时,应该把src信息与desc信息分开,否则在resizeEvent中调用会造成拉伸窗口(改变大小)时显得不流畅

2. 当图拉大时,会出现占用内存增大

img;

img.load("test.jpg");

for (int i = 0; i < img.height(); i++)

{

for (int j = 0; j < img.width(); j++)

{

if(img.pixel(j, i) == qRgba(255,255,255,255))

img.setPixel(j, i, Qt::transparent);//Or you can use qRgba(0,0,0,0) instead for trans

}

}

img.save("changed.png");//I dont remember that png can alpha channel or not.

qt for android 图片可拉伸,qt实现九宫格布局,图片拉伸相关推荐

  1. qt on android 桌面鼠标事件,Qt on Android 不能自动创建Qt套件的问题的解决

    在按照<Qt on Android核心编程>在搭建Qt on Android开发环境的时,虽然完全按书上的做法做了好几遍,但是在Qt Creator配置Android的Qt套件时,看到Qt ...

  2. 鲁班图片压缩实现仿微信九宫格选择图片效果

    项目开发中碰到了类似微信的图片选择.图片压缩及上传,一开始利用一些第三方的进行修改,但是很容就出现内存溢出,而有些比较优秀的第三方的多半是采用远程依赖的方式集成开发的,很难对源码进行改动而达到自己的需 ...

  3. qt和android文件传输,编写qt到安卓手机的一些小心得

    时隔一段时间,自己负责的APP已经有了落幕,从开始的不懂到现在的约略感悟,也算是积累了一些小经验, 刚开始写了一些很浅显的心得体会,现在回头来看还是有点小价值的,在当时因为这些问题也是费了不少时间, ...

  4. 仿360新闻的热搜图片,win8风格随机九宫格布局

    360新闻地址:http://sh.qihoo.com/i/ 感觉这效果挺好的,随机九宫格,在不少地方可以用到,就研究了下他的源码,基本原理就是预先定义好几种布局模块,然后根据需要进行拼接,具体代码可 ...

  5. Qt for Android / ios 将图片或文件打包进安装包中

    概述 用 Qt 做程序开发,图片或翻译文件的引用有两种方式,一种是直接引用,本地图片, 一种是编译到资源文件中,其实直接添加在资源文件中是最方便的,不需要考虑文件存放的问题,但是这样可能带来的问题是启 ...

  6. Qt on Android 核心编程

    Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...

  7. Qt on Android: http下载与Json解析

    百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你可以在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip ...

  8. 《Qt on Android核心编程》夹

    china-pub在售前,售中环节退房,折扣低! 有朋友想看看<Qt on Android核心编程>的文件夹,So-- 文件夹 <Qt on Android核心编程>文件夹,截 ...

  9. Qt for Android获取手机热点开关状态

    Qt开发android应用,从Qt端调用android原生接口获取手机热点开关状态,首先来看一下封装好的android接口类wifiHostBiz.java (以下代码来自网络) package co ...

  10. Qt on Android:将Qt调试信息输出到logcat中

    版权全部 foruok .如需转载敬请注明出处(http://blog.csdn.net/foruok). 假设你在目标 Android 设备上执行了 Qt on Android 应用,你可能希望看到 ...

最新文章

  1. linux selenium_爬虫界又出神器|一款比selenium更高效的利器
  2. laravel(二):laravel基本入门 看到Hello Laravel
  3. 约瑟夫问题(丢手帕问题)的java实现
  4. sap idoc techniques
  5. ASP.NET MVC5(一):ASP.NET MVC概览
  6. 独轮车(广搜_队列)
  7. 汽车维修企业管理【1】
  8. 运动控制芯片 Motion Control ICs
  9. eclipse插件SonarLint点击deactivate rule后恢复
  10. 《指弹:周杰伦青花瓷》
  11. lae界面开发工具入门之介绍二--渲染组件篇
  12. 转座子可抑制mRNA翻译
  13. 离散数学学习笔记——命题逻辑
  14. Ovftool安装导出vsphere虚拟机
  15. Maya角色UV展平技巧笔记
  16. 【Android】代码中动态设置 drawable 背景
  17. Google Guava的5个鲜为人知的特性
  18. phpstorm文件的大纲里的m、f、fx是什么意思?
  19. mysql备份 1044_Navicat访问MySQL出现1044/1045错误的解决方法
  20. July, 7(R)

热门文章

  1. Android dependency 'com.android.support:support-v4' has different version for the compile (26.1.0...
  2. Swift中的闭包例子
  3. javascript中对变量类型的推断
  4. MySql 自动更新时间为当前时间
  5. 域名商2014年度报告:35互联域名总量增至33.4万
  6. Yii基于角色的访问控制(非Rbac)
  7. ASP.NET 2.0+Atlas编写鼠标拖放程序
  8. 我喜欢的一首歌--《幸福的瞬间》
  9. 1859. 将句子排序
  10. leetcode 1833. 雪糕的最大数量