首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Qt 5 遷移指南:QML 應用移植核心變更與 C++ API 重構詳解

     編輯:C++ 入門

Qt 5 遷移指南:QML 應用移植核心變更與 C++ API 重構詳解

Qt 4.8 到 Qt 5 的 QML 基礎設施經歷重大重構:渲染架構從 Graphics View 遷移到 OpenGL 場景圖,C++ 模塊從 QtDeclarative 拆分為 Qt QML (引擎) 和 Qt Quick (視圖)。本文匯總 QML 語言變更、QtQuick 2 API 差異、C++ 類名映射、插件機制更新及兼容模塊用法。

一、 QML 語言層面變更 (極少)

  • 單文件導入失效:import "MyType.qml" 不再支持,**改為導入目錄** import "path/to/dir"。
  • JS 相對路徑解析基準變更:以 **JavaScript 文件自身位置** 為準,而非導入它的 QML 文件位置。
  • 不可覆蓋基類信號**:派生組件不能重新聲明基類已有的信號。

二、 QtQuick 2 模塊更新 (import QtQuick 2.x)

屬性/方法重命名

  • ListView.highlightMoveSpeed → highlightMoveVelocity
  • ListView.highlightResizeSpeed → highlightResizeVelocity
  • TextInput/TextEdit.openSoftwareInputPanel() / closeSoftwareInputPanel() **移除** → 使用 Qt.inputMethod.show() / hide()。

類型/模塊遷移

  • XmlListModel 移至獨立模塊 import QtQuick.XmlListModel。
  • 本地存儲 (SQL) 移至單例類型 import QtQuick.LocalStorage,不再掛載於全局對象。
  • LayoutItem 移除 (僅用於 Qt Quick 1 Graphics View 後端)。

行為變更 (需充分測試)

實驗室模塊變更

  • Qt.labs.particles **移除** → 正式模塊 QtQuick.Particles (功能強大得多)。
  • Qt.labs.shaders **移除** → ShaderEffectItem 重命名為 ShaderEffect 並入 QtQuick;ShaderEffectSource 同入 QtQuick。

三、 C++ API 重構:QtDeclarative → Qt QML + Qt Quick

類名映射表 (核心)

領域Qt Quick 1Qt Quick 2兼容建議
透明度/可見性與輸入opacity=0 阻擋鼠標;visible=false 阻擋鍵盤鼠標opacity=0 **不阻擋**輸入;visible=false 僅阻擋鼠標;新 enabled 屬性控制鍵盤鼠標綁定 enabled: visible && opacity > 0 模擬舊行為
定位器中項目隱藏opacity=0 或 visible=false 導致佈局塌陷**僅 visible=false 塌陷**,opacity 不影響佈局 (與 ListView/GridView 一致)調整邏輯依賴 visible 而非 opacity
Text 格式默認值TextEdit.textFormat 默認 AutoText默認 **PlainText**顯式設置 textFormat: Text.AutoText
AutoText 渲染自動切換為 RichText自動切換為 **StyledText** (輕量富文本)需 RichText 時顯式指定
Image.sourceSize拉伸填充**保持縱橫比縮放**調整 UI 佈局預期
ListView/GridView 緩存cacheBuffer 默認 0,同步創建代理cacheBuffer **非零默認**,代理**異步創建**異步加載圖片更流暢,注意初始化順序
RightToLeft 佈局不反轉高亮範圍反轉 preferredHighlightBegin/EndRTL 語言自動適配
Loader 信號sourceChanged/sourceComponentChanged 任一變更雙發**僅各自屬性變更時發射**修正信號槽連接邏輯

.pro 文件配置

# 新模塊 (推薦新項目)
QT += qml quick

# 頭文件包含
#include 
#include 

關鍵繼承體系變更

  • QDeclarativeItem → QQuickItem:不再繼承 QGraphicsItem,直接繼承 QObject。**無 paint() 方法**,自定義渲染必須用 QSG* 場景圖類;或繼承 QQuickPaintedItem 保留 paint(QPainter*) (性能較差)。
  • QDeclarativeView → QQuickView:不再繼承 QGraphicsView,繼承 QQuickWindow,基於 Qt 5 QWindow 基礎設施,**無 GraphicsView 功能**。

四、 工具與插件機制更新

  • qmlviewer → qmlscene**:新工具集成場景圖特性,用於原型測試。
  • QML 插件:繼承 QQmlExtensionPlugin;**棄用 Q_EXPORT_PLUGIN2**,改用類內 Q_PLUGIN_METADATA() 宏 (Qt 5 插件元數據系統)。

五、 兼容模塊:Qt Quick 1 (原 QtDeclarative)

舊項目緊急遷移可暫用:

# .pro
QT += declarative

# 頭文件
#include 
#include 

警告:Qt Quick 1 基於 Graphics View,**不支持場景圖優化**,新項目**嚴禁使用**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Qt 4 (QtDeclarative)Qt 5 模塊Qt 5 類名
QDeclarativeComponentQt QMLQQmlComponent
QDeclarativeContextQt QMLQQmlContext
QDeclarativeEngineQt QMLQQmlEngine
QDeclarativeErrorQt QMLQQmlError
QDeclarativeExpressionQt QMLQQmlExpression
QDeclarativeExtensionPluginQt QMLQQmlExtensionPlugin
QDeclarativeItemQt QuickQQuickItem
QDeclarativeViewQt QuickQQuickView
QDeclarativeImageProviderQt QuickQQuickImageProvider