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.pswp.cn/news/394692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394692.shtml
英文地址,請注明出處:http://en.pswp.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;于是自己寫了個…