qt for android 图片可拉伸,qt实现九宫格布局,图片拉伸
在实现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实现九宫格布局,图片拉伸相关推荐
- qt on android 桌面鼠标事件,Qt on Android 不能自动创建Qt套件的问题的解决
在按照<Qt on Android核心编程>在搭建Qt on Android开发环境的时,虽然完全按书上的做法做了好几遍,但是在Qt Creator配置Android的Qt套件时,看到Qt ...
- 鲁班图片压缩实现仿微信九宫格选择图片效果
项目开发中碰到了类似微信的图片选择.图片压缩及上传,一开始利用一些第三方的进行修改,但是很容就出现内存溢出,而有些比较优秀的第三方的多半是采用远程依赖的方式集成开发的,很难对源码进行改动而达到自己的需 ...
- qt和android文件传输,编写qt到安卓手机的一些小心得
时隔一段时间,自己负责的APP已经有了落幕,从开始的不懂到现在的约略感悟,也算是积累了一些小经验, 刚开始写了一些很浅显的心得体会,现在回头来看还是有点小价值的,在当时因为这些问题也是费了不少时间, ...
- 仿360新闻的热搜图片,win8风格随机九宫格布局
360新闻地址:http://sh.qihoo.com/i/ 感觉这效果挺好的,随机九宫格,在不少地方可以用到,就研究了下他的源码,基本原理就是预先定义好几种布局模块,然后根据需要进行拼接,具体代码可 ...
- Qt for Android / ios 将图片或文件打包进安装包中
概述 用 Qt 做程序开发,图片或翻译文件的引用有两种方式,一种是直接引用,本地图片, 一种是编译到资源文件中,其实直接添加在资源文件中是最方便的,不需要考虑文件存放的问题,但是这样可能带来的问题是启 ...
- Qt on Android 核心编程
Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著 ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...
- Qt on Android: http下载与Json解析
百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你可以在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip ...
- 《Qt on Android核心编程》夹
china-pub在售前,售中环节退房,折扣低! 有朋友想看看<Qt on Android核心编程>的文件夹,So-- 文件夹 <Qt on Android核心编程>文件夹,截 ...
- Qt for Android获取手机热点开关状态
Qt开发android应用,从Qt端调用android原生接口获取手机热点开关状态,首先来看一下封装好的android接口类wifiHostBiz.java (以下代码来自网络) package co ...
- Qt on Android:将Qt调试信息输出到logcat中
版权全部 foruok .如需转载敬请注明出处(http://blog.csdn.net/foruok). 假设你在目标 Android 设备上执行了 Qt on Android 应用,你可能希望看到 ...
最新文章
- linux selenium_爬虫界又出神器|一款比selenium更高效的利器
- laravel(二):laravel基本入门 看到Hello Laravel
- 约瑟夫问题(丢手帕问题)的java实现
- sap idoc techniques
- ASP.NET MVC5(一):ASP.NET MVC概览
- 独轮车(广搜_队列)
- 汽车维修企业管理【1】
- 运动控制芯片 Motion Control ICs
- eclipse插件SonarLint点击deactivate rule后恢复
- 《指弹:周杰伦青花瓷》
- lae界面开发工具入门之介绍二--渲染组件篇
- 转座子可抑制mRNA翻译
- 离散数学学习笔记——命题逻辑
- Ovftool安装导出vsphere虚拟机
- Maya角色UV展平技巧笔记
- 【Android】代码中动态设置 drawable 背景
- Google Guava的5个鲜为人知的特性
- phpstorm文件的大纲里的m、f、fx是什么意思?
- mysql备份 1044_Navicat访问MySQL出现1044/1045错误的解决方法
- July, 7(R)
热门文章
- Android dependency 'com.android.support:support-v4' has different version for the compile (26.1.0...
- Swift中的闭包例子
- javascript中对变量类型的推断
- MySql 自动更新时间为当前时间
- 域名商2014年度报告:35互联域名总量增至33.4万
- Yii基于角色的访问控制(非Rbac)
- ASP.NET 2.0+Atlas编写鼠标拖放程序
- 我喜欢的一首歌--《幸福的瞬间》
- 1859. 将句子排序
- leetcode 1833. 雪糕的最大数量