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

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

090906215945.png

附件图片:

rar.gif

文件:

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一次作业-李纯锐201731084433

作业属于课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求位置 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2706 我在这个课程的目标是&#xff1a; 认真学习好软件工程原理以及科学的软件项目开发与管理方法&…

定点化_mif文件生成

clc; %全屏清零 clear all; %变量清零 N2^8; %设置ROM深度&#xff08;字变量&#xff09;的变量参数&#xff0c; s_p0:255; …

zeppelin连接数据源_使用开放源代码合同(open-zeppelin)创建以太坊令牌

zeppelin连接数据源by Danny通过丹尼 使用开放源代码合同(open-zeppelin)创建以太坊令牌 (Create an Ethereum token using open source contracts (open-zeppelin)) I want to show you that creating a best practice token is a simple process. To be honest, we are goin…

python不是内部文件_已安装python,但是出现‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。...

解决方法&#xff1a; 1.打开python shell查看你的python安装路径&#xff08;黄色标注&#xff09; >>> import sys >>> sys.path [, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\idlelib, C:\\Users\\Administrator\\App…

使用canvas绘制时钟

使用canvas绘制时钟 什么使canvas呢&#xff1f;HTML5 <canvas> 元素用于图形的绘制&#xff0c;通过脚本 (通常是JavaScript)来完成。<canvas> 标签只是图形容器&#xff0c;所以我们必须使用脚本来绘制图形。通过它可以绘制路径,盒、圆、字符以及添加图像等等。 …

Visual Studio 2017创建XAML文件

Visual Studio 2017创建XAML文件在Visual Stuido 2015中&#xff0c;在已经创建好的项目中添加XAML文件&#xff0c;只要右击项目&#xff0c;单击“添加”|“新建项”命令&#xff0c;然后从“添加新项”对话框中&#xff0c;选择“Cross-Platform”|“Forms Xaml Page”选项即…

android 安装assets中的apk,如何安装assets下apk,附源码(原创)

publicstaticvoidInstall(Context ctx, String strLocalFile) {Intent intentInstallnewIntent();String apkPath"/data/data/"ctx.getPackageName()"/files";String apkName"yuan.apk";File filenewFile(apkPath, apkName);try{//assets下对于超…

FtpWebRequest.UsePassive属性:设置FTP工作模式

默认值&#xff1a;true&#xff0c;被动模式 PASV&#xff08;被动&#xff09;方式的连接过程是&#xff1a;客户端向服务器的FTP端口&#xff08;默认是21&#xff09;发送连接请求&#xff0c;服务器接受连接&#xff0c;建立一条命令链路。 当需要传送数据时&#xff0c; …

angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案

angular面试题及答案by Shlomi Levi通过Shlomi Levi 关于最流行的Angular问题的StackOverflow上的48个答案 (48 answers on StackOverflow to the most popular Angular questions) I gathered the most common questions and answers from Stackoverflow. These questions we…

c++分治法求最大最小值实现_最优化计算与matlab实现(12)——非线性最小二乘优化问题——G-N法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com非线性最小二乘优化问题非线性最小二乘优化也叫无约束极小平方和函数问题&#xff0c;它是如下无约束极小问…

win7 IIS7环境下部署PHP 7.0

最近在本机电脑win7 II7环境下部署PHP 7.0遇到一些问题&#xff0c;将之记录下来 简要步骤如下&#xff1a; 1、到php官网下载php&#xff0c;由于是IIS环境要下载非线程安全的版本&#xff0c;我下载的是7.0.13 2、解压到本地文件目录下 3、通过控制台进入到php文件目录&#…

《Oracle高性能自动化运维》一一3.3 Redo产生场景

3.3 Redo产生场景我们知道&#xff0c;Oracle Redo是以条目&#xff08;Redo Entries/Records&#xff09;的形式记录数据库的所有更改操作&#xff08;OP&#xff09;。更改操作主要包括&#xff1a;数据库物理文件更改&#xff1a;主要指的是数据库物理文件的增减等操作&…

智能算法(GA、DBO等)求解零空闲流水车间调度问题(NIFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

《构建之法》读后感 二

个人感受部分&#xff1a; 01. 过去的我对自己的职业没有一个规划&#xff0c;认为读大学就是拿毕业证&#xff0c;至于以后找到什么样的工作从来没有考虑过。在拿到一个软件作业时&#xff0c;总是在设计阶段就把它想得特别完美&#xff0c;想让他没有任何出错的做出来&#x…

android 简单实现圆角,Android 实现圆角图片的简单实例

Android 实现圆角图片的简单实例实现效果图&#xff1a;本来想在网上找个圆角的例子看一看&#xff0c;不尽人意啊&#xff0c;基本都是官方的Demo的那张原理图&#xff0c;稍后会贴出。于是自己自定义了个View&#xff0c;实现图片的圆角以及圆形效果。效果图&#xff1a;Andr…

zookeeper介绍及集群的搭建(利用虚拟机)

ZooKeeper ​   ZooKeeper是一个分布式的&#xff0c;开放源码&#xff08;apache&#xff09;的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase、dubbox、kafka的重要组件。它主要用来解决分布式集群中应用系统的一致性问题…

pythondict初始化_利用defaultdict对字典进行全局初始化。

通常我们在操作字典时&#xff0c;如果读取的键未被初始化&#xff0c;则会抛出KeyError的错误&#xff0c;这个是我们都很熟悉的。那么一般的解决方式是使用异常处理或者是调用字典的get方法来避免出现这个异常。 可以看到&#xff0c;这两种写法都比较繁琐&#xff0c;第二种…

标准库类型String

定义和初始化string对象 初始化string对象方式 string s1 默认初始化&#xff0c;s1是一个空串 string s2(s1) s2是s1的副本 string s2 s1 等价于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本&#xff0c;除了字面值最后的那个…

轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)

讲师介绍张亮 当当架构部总监 负责分布式中间件和私有云平台建设 目前主导开源项目&#xff1a;Elastic-Job及Sharding-JDBC 主题简介&#xff1a; 1、关系型数据库中间件核心功能介绍 2、Sharding-JDBC架构及内核解析 3、Sharding-JDBC未来展望 一、关系型数据库中间件核心功…

python字典嵌套字典的情况下获取某个key的value

最近在用python写接口的测试程序&#xff0c;期间用到解析字典获取某个key的value&#xff0c;由于多个接口返回的字典格式不是固定的并存在多层嵌套的情况。在字典的方法中也没有找到可直接达到目的的方法(也可能是我对字典的方法了解的不深的缘故)&#xff0c;于是自己写了个…