Qt:讓QML中的控制元件自動縮放
為了讓QML開發的程式適應更多的裝置,我們可能需要去縮放Item,但是手動縮放開發太耗時還容易出錯,所以我封裝了一下
效果是根據開發時的x、y、width、height自動縮放的擴充套件
效果(3個效果是引數不同組合的結果):
正常情況下
拉寬
拉長
拉大
AutoResize.qml程式碼:
import QtQuick 2.4 Item { property var targetItem: parent property bool fixedAspectRatio: true // Else zoom from width and height property bool accordingToX: true // Else according to center property var targetItemGeometry property var childrenItemGeometry property bool isBegin: false function begin() { targetItemGeometry = new Object; targetItemGeometry["width"] = targetItem.width; targetItemGeometry["height"] = targetItem.height; var children = targetItem.children; var data = new Array; for(var index = 1; index < children.length; index++) { var currentItem = children[index]; var buf = new Object; buf["item"] = currentItem; buf["x"] = currentItem.x; buf["y"] = currentItem.y; buf["centerX"] = currentItem.x + (currentItem.width / 2); buf["centerY"] = currentItem.y + (currentItem.height / 2); buf["width"] = currentItem.width; buf["height"] = currentItem.height; data.push(buf); } childrenItemGeometry = data; isBegin = true; } function resize() { if(isBegin) { var horizontalRatio, verticalRatio; horizontalRatio = targetItem.width / targetItemGeometry["width"]; verticalRatio = targetItem.height / targetItemGeometry["height"]; for(var index = 0; index < childrenItemGeometry.length; index++) { if(fixedAspectRatio) { if(horizontalRatio > verticalRatio) { childrenItemGeometry[index]["item"].width = childrenItemGeometry[index]["width"] * verticalRatio; childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * verticalRatio; } else { childrenItemGeometry[index]["item"].width = childrenItemGeometry[index]["width"] * horizontalRatio; childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * horizontalRatio; } } else { childrenItemGeometry[index]["item"].width = childrenItemGeometry[index]["width"] * horizontalRatio; childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * verticalRatio; } if(accordingToX) { childrenItemGeometry[index]["item"].x = childrenItemGeometry[index]["x"] * horizontalRatio; childrenItemGeometry[index]["item"].y = childrenItemGeometry[index]["y"] * verticalRatio; } else { childrenItemGeometry[index]["item"].x = childrenItemGeometry[index]["centerX"] * horizontalRatio - (childrenItemGeometry[index]["item"].width / 2); childrenItemGeometry[index]["item"].y = childrenItemGeometry[index]["centerY"] * verticalRatio - (childrenItemGeometry[index]["item"].height / 2); } } } } Component.onCompleted: { begin(); } Component { id: connections Connections { target: targetItem onWidthChanged: { resize(); } onHeightChanged: { resize(); } } } Loader { Component.onCompleted: { sourceComponent = connections; } } }
使用:
Rectangle { width: parent.width / 2 height: parent.height / 2 color: "#00000000" AutoResize { fixedAspectRatio: true accordingToX: true } Rectangle { x: 15 y: 10 width: 80 height: 200 color: "#ff0000" } Rectangle { x: 15 y: 210 width: 200 height: 80 color: "#00ff00" } Rectangle { x: 124 y: 43 width: 247 height: 20 color: "#0000ff" } Rectangle { x: 242 y: 140 width: 150 height: 150 color: "#000000" } }
只要把AutoResize直接以例項化出來就可以了
注意:AutoResize建議放在第一個子控制元件的位置,不然可能會報錯而且需要手動初始化
引數說明:
fixedAspectRatio:固定長寬比,否則根據父物件長寬比縮放,預設true
accordingToX:根據X軸調整位置,否則根據中心點調整位置,預設true示例下載地址:
相關推薦
Qt:讓QML中的控制元件自動縮放
為了讓QML開發的程式適應更多的裝置,我們可能需要去縮放Item,但是手動縮放開發太耗時還容易出錯,所以我封裝了一下 效果是根據開發時的x、y、width、height自動縮放的擴充套件 效果(3個效果是引數不同組合的結果): 正常情況下 拉寬 拉長 拉大 A
MFC中picture控制元件,將bitmap根據控制元件大小縮放
直接在OnInitDialog()函式中新增即可; CRect rc; m_ctrlPic.GetClientRect(&rc); CDC* pdcpic = m_ctrlPic.GetDC(); //m_ctrlPic是Picture控制元件的變數
Android仿微信朋友圈高清圖檢視控制元件可縮放、雙擊、移動
該庫支援和包含的功能: 1.圖片支援手勢操作, 可縮放、雙擊、移動 2.圖片載入時的進度條, 支援自定義 該庫的效果圖如下: 本地相簿圖片效果圖: 點選預覽大圖的效果 本想直接新增gradle依賴庫,不巧的是,之前版本已作廢,待現在版本穩定後,
iOS控制元件的縮放,平移,旋轉和回到原點
<span style="font-family:Verdana;"><span style="font-family:Microsoft YaHei;"><span style="font-family:Microsoft YaHei;"&g
Qt學習筆記:把QtQuick作為控制元件嵌入到QtWidgets
環境 系統:Windows10 64位 家庭中文版 Qt版本:5.6.0 msvc2013 64位 編譯器:Visual Studio 2013 專業版 目的 把用QML實現的介面嵌入到QtWidget,同時實現對QML屬性的設定。 步驟 1.把要實現的QML視窗設計
BCGControlBar教程:如何將MFC控制元件的BCGControlBarBCGSuite新增到對話方塊中
BCGControlBar Pro for MFC最新試用版下載請猛戳>>> 如果您正在使用我們的Windows窗體產品,那麼將我們的控制元件新增到窗體是沒有問題的:只需從Visual Studio工具箱中拖動所需的專案並將其放入窗體即可。在對話方塊中新增非標準控制元件需要一些
Qt QListWidget QTreeWidget QComboBox等控制元件中,禁用滾動條的右鍵選單
有時候在開發新控制元件的時候,會偶然點到滾動條的右鍵選單,出現之後很難看 那麼怎麼去掉呢? 其實很簡單,如果是QListWidget ,QTreeWidget控制元件, //記得包含標頭檔案 #i
ApolloStudio高手之路(6):用Python以極簡方式讀寫OPC DA、OPC UA資料並實現UI控制元件自動繫結重新整理顯示
OPC(OLE for Process Control, 用於過程控制的OLE)是一個工業標準,OPC是為了連線資料來源(OPC伺服器)和資料的使用者(OPC應用程式)之間的軟體介面標準。資料來源可以是PLC,DCS,條形碼讀取器等控制裝置。隨控制系統構成的不同,作為資料來源的OPC伺服器既可以
【QT】QT的學習:在QML中使用AJAX向某伺服器傳送請求獲取資料
(1)準備Ajax.js // GET function get(url, success, failure) { var xhr = new XMLHttpRequest; xhr.open("GET", url); xhr.onreadyst
QT中程式碼中與設計器中控制元件訊號與SLOT連線
雙擊testqt.ui 託一個push button到窗體中,雙擊,可以輸入字元 按F4或 menu->edit->edit signals/slots 定義SLOT 選擇已定義好的SLOT,點確定就可以進行關聯了。 定義自定義SLO
[WPF] 讓第一個資料驗證出錯(Validation.HasError)的控制元件自動獲得焦點
## 1. 需求 在上一篇文章 《[在 ViewModel 中讓資料驗證出錯(Validation.HasError)的控制元件獲得焦點](https://www.cnblogs.com/dino623/p/focus_controls_in_ViewModel.html)》中介紹瞭如何讓 Validati
高階控制元件 自動提示文字框與下拉列表
一、 高階控制元件使用步驟 1 、獲取資料 2 、建立介面卡 3 、繫結介面卡 二、自動提示文字框 1 、AutoCompleteTextView(單一提示) android:completionThreshold=”1” 2 、MultiAutoCompleteTextV
vs-code中,react元件自動補全外掛的配置
react元件自動補全外掛: 輸入rcc,按tab鍵 ② 外掛截圖: ③ 外掛的配置: 點選檔案-首選項-設定:點選後會是以下介面 然後點選那三個點---"開啟sett
WPF 獲取 ListView DataTemplate 中控制元件值
原文: WPF 獲取 ListView DataTemplate 中控制元件值 RT 雖然DataTemplate 是用來繫結的,一般用ONE TWOWAY 來繫結傳遞或獲取資料. 但是今天這個需求真是沒辦法,在繫結的模板內添加了一個非繫結的資料,需要手動取值. 解決方案原理:
MFC OnPaint中控制元件繪圖,覆蓋重疊的控制元件
對話方塊上又兩個控制元件,一個static控制元件SS_BITMAP屬性,用來繪圖(canvas),一個static控制元件SS_BITMAP屬性,用來顯示圖片(tool),tool和canvas有重疊部分,為了使canvas在重新整理後不至於消失,我在OnPaint中採用雙緩衝繪圖方式重新整理內容
RxSwift:Driver與UI控制元件初體驗
輸入電話號碼的區號和八位數主體號碼,下面的Label實時更新最新的輸入,如果區號為3位數,點選按鈕,按鈕名字變成“變!” Ps:目前還不會,同時滿足上面兩位,下面三位的的約束,以後會更新的 檔名:ViewController.swift // // ViewController.swi
android開發:自定義組合控制元件
內容介紹 本文記錄,自定義組合控制元件,為了可以程式碼複用,減少程式碼量 配置控制元件屬性檔案 開啟res/values/目錄下的arss.xml檔案,新增下面屬性程式碼,如果沒有建立arrs.xml檔案。 <?xml version="1.0" enc
iOS開發:常用的UIView控制元件——UILabel、UITextField、UIButton
前面幾篇文章已經對iOS開發中比較基本的幾個檔案進行了瞭解,今天主要學習StoryBoard檔案和幾個常見的UI控制元件。 Storyboard功能是在iOS5開始新增的功能,一種新技術的出現大多是為了彌補舊技術的不足,而在storyboard之前iOS 開發設計介面是使用nib檔案(xib
手機顯示資料的原理:手機通過WebView控制元件顯示網頁資料
WebView控制元件是用於顯示網頁的,手機根據網頁建立一個WebView,之後顯示出來,所以顯示WebView網頁是通過WebView控制元件顯示的。 <script type="text/javascript" charset="utf-8
BootStrap讓兩個控制元件在一行顯示(label和input同行)
1 、新增class=“form-inline” <div class="row"> <div> <label class="form-inline" />參加單位: