| 領域 | Qt Quick 1 | Qt 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/End | RTL 語言自動適配 |
| Loader 信號 | sourceChanged/sourceComponentChanged 任一變更雙發 | **僅各自屬性變更時發射** | 修正信號槽連接邏輯 |
實驗室模塊變更
Qt.labs.particles **移除** → 正式模塊 QtQuick.Particles (功能強大得多)。
Qt.labs.shaders **移除** → ShaderEffectItem 重命名為 ShaderEffect 並入 QtQuick;ShaderEffectSource 同入 QtQuick。
三、 C++ API 重構:QtDeclarative → Qt QML + Qt Quick
類名映射表 (核心)
| Qt 4 (QtDeclarative) | Qt 5 模塊 | Qt 5 類名 |
| QDeclarativeComponent | Qt QML | QQmlComponent |
| QDeclarativeContext | Qt QML | QQmlContext |
| QDeclarativeEngine | Qt QML | QQmlEngine |
| QDeclarativeError | Qt QML | QQmlError |
| QDeclarativeExpression | Qt QML | QQmlExpression |
| QDeclarativeExtensionPlugin | Qt QML | QQmlExtensionPlugin |
| QDeclarativeItem | Qt Quick | QQuickItem |
| QDeclarativeView | Qt Quick | QQuickView |
| QDeclarativeImageProvider | Qt Quick | QQuickImageProvider |
.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,**不支持場景圖優化**,新項目**嚴禁使用**。
- 上一篇文章: C++ 基礎知識體系重拾(一):編譯、基礎類型、初始化、作用域、引用、const、頭文件
- 下一篇文章: C++ 重載、隱藏、虛函數與多態深度解析:核心區別與面試陷阱
Copyright ©
程式碼之家 All Rights Reserved