zoukankan      html  css  js  c++  java
  • Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)

    Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持。它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程序。

    在嵌入式系统中,硬件资源有限,这套系统可能是比较低效率的。而Qt Quick Controls 2正是为解决这样的问题而生的,可以使用基准测试来指导开发。

    C++和QML

    在许多情况下,C++对内部状态的处理会更加的高效。例如,对比C++处理events的过程,controls需要创建内部的MouseAreas并绑定Keys对象。

    样式

    不仅是在C++中处理事件和逻辑能提高性能,这还允许可视化的QML层成为更简单的声明式层。这反映在controls项目的结构上:所有可视化实现都位于imports文件夹中,这样,想要创建自己完整样式的用户就可以复制该文件夹并开始调整。看这里以了解更多关于样式插件的实现。

    在Qt Quick Controls 2中,样式不再提供由controls实例化的组件(components),而是controls们包含可以被替代的item delegates。事实上,这代表delegates是现场实例化的Qt Quick item并且作为control的属性,然后再简单地把control作为父节点关联起来。

    模块化和简单化

    在遇到复杂地controls的情况下,有时候把它们分开成不同的块会更好一些。比如,一个复杂的ScrollView control:

    ScrollView {
        horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
        Flickable {
            // ...
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    而替换成简单的 ScrollBar/ScrollIndicator控件则可以被附加到任何的Flickable上:

    Flickable {
        // ...
        ScrollBar.vertical: ScrollBar { }
    }
    • 1
    • 2
    • 3
    • 4

    Qt Quick Controls 2 API的目标是变得更简单明了。常规的操作很简单,而更复杂的操作则可以变成拷贝到你代码中的文档型代码块。

    特性比照表

    ~Qt Quick ControlsQt Quick Controls 2
    样式化的delegates Yes Yes
    内建原生styles Yes No
    运行时style/theme切换 Yes1 Yes2
    可用于Desktop Yes Yes
    可用于Mobile Yes3 Yes
    可用于Embedded Yes3 Yes
    内部事件处理 QML C++

    1.非官方支持,但是技术上可以通过私有API实现 
    2.只有theme是可以在运行时切换的,而style则是固定的 
    3.性能上可能不是最好的

    迁移Qt Quick Controls的代码

    Qt Quick Controls2的API跟Qt Quick Controls是十分相似的,但是其实际上为了改进,还是有些API被改变了。最多的改变就是样式方面的改变;所有控件的delegate都可以通过控件自身访问,而非通过分离的样式对象。

    举个例子,要在Qt Quick Controls中设置Button的样式:

    Button {
        style: ButtonStyle {
            label: Label {
                // ...
            }
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    而在Qt Quick Controls2中,则像下面这样:

    Button {
        contentItem: Label {
            // ...
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    准备迁移

    迁移到 Qt Quick Controls 2的一个比较好的办法是,将每个有自定义样式的控件放到一个单独的QML文件中。比如,上面Qt Quick Controls的button就可以移动到一个名为Button.qml的文件中,然后将这个文件放到一个名为controls的文件夹中,然后再按以下方式操作:

    import "controls" as Controls
    
    Controls.Button {
        ...
    }
    • 1
    • 2
    • 3
    • 4
    • 5

    这样的做法在新旧的模块中都能用,并能减少迁移开始时的工作量。

    类型对照表

    第一列列出了在Qt Quick Controls 1, Qt Quick Dialogs, 和 Qt Quick Extras中所有可用的类型,第二列则是Qt Quick Controls 2中对应的类型。如果没有直接替代方案,则第三列包含提供相关功能的备选方案。最后一列包含了在两个模块内的对应类型区别的说明。

    Qt Quick Controls 1Qt Quick Controls 2备选方案备注
    Action Action Shortcut
    (Qt Quick)
     
    ApplicationWindow ApplicationWindow    
    BusyIndicator BusyIndicator    
    Button Button    
    Calendar MonthGrid,
    DayOfWeekRow,
    WeekNumberColumn
    (Qt Labs Calendar)
    Qt Labs Calendar: MonthGrid, DayOfWeek, 和 WeekNumberColumn 属于未风格化的calendar视图
    CheckBox CheckBox    
    ComboBox ComboBox    
    ExclusiveGroup ActionGroup,
    ButtonGroup
    (Qt Quick Controls 2)
    Qt Quick Controls 2: ActionGroup 和 ButtonGroup 提供相似的功能
    GroupBox GroupBox    
    Label Label    
    Menu Menu Menu
    (Qt Labs Platform)
    Qt Quick Controls 1: Menu是在Qt平台抽象层提供实现的平台上原生的。其他平台使用基于QML的顶级菜单弹出窗口。菜单支持传统的桌面风格联级子菜单,但是在嵌入式Linux上不管用,因为EGLFS不支持多个顶级窗口。
    Qt Quick Controls 2: Menu是非原生、基于Item的,而是堆叠在应用程序内容之上的弹出窗口。因此,菜单弹出窗口被限制在窗口边界内。Menu完全可由QML和Qt Quick定制样式,并且可以允许添加任何的Item。传统桌面的特性(如联级子菜单和可视键盘快捷键)都不支持。
    Qt Labs Platform: Menu是一个实验性的本地菜单,在不支持Qt平台抽象层提供实现的平台上,它会fallback到Qt Widgets。
    MenuBar MenuBar MenuBar
    (Qt Labs Platform)
    Qt Quick Controls 1: MenuBar是在Qt平台抽象层提供实现的平台上原生的。其他平台使用堆叠在窗口顶部的基于QML的菜单栏项目。
    Qt Quick Controls 2: MenuBar是基于QML并可以完全使用QML和Qt Quick定制样式的非原生menubar。
    Qt Labs Platform: MenuBar是一个实验性的原生menubar。它只能用于支持Qt平台抽象层原生实现的平台。
    MenuItem,
    MenuSeparator
    MenuItem,
    MenuSeparator
    MenuItem,
    MenuSeparator
    (Qt Labs Platform)
    Qt Quick Controls 1: MenuItem 和 MenuSeparator在支持Qt平台抽象层实现的平台上是原生的。其他平台使用基于QML的menu item和separator。
    Qt Quick Controls 2: MenuItem 和 MenuSeparator是基于QML并完全可用QML和Qt Quick定制样式的非原生item。
    Qt Labs Platform: MenuItem and MenuSeparator是实验性的原生menu item和separator
    ProgressBar ProgressBar    
    RadioButton RadioButton    
    ScrollView ScrollView    
    Slider Slider    
    SpinBox SpinBox    
    SplitView    
    StackView,
    StackViewDelegate,
    Stack
    StackView   Qt Quick Controls 2: StackView通过一个单独的StackView类型提供可定制的转换和附加属性。
    StatusBar ToolBar
    (Qt Quick Controls 2)
    Qt Quick Controls 2: ApplicationWindow允许分配任何的item或者控件比如ToolBar作为header或者footer。
    Switch Switch    
    TabView,
    Tab
    TabBar,
    TabButton
    (Qt Quick Controls 2)
    Qt Quick Controls 2: TabBar 和 TabButton 提供了相似的函数,可以用来构建tabbed views。
    TableView    
    TextArea TextArea   Qt Quick Controls 1: TextArea 继承于ScrollView,因此它始终是个可滚动的editor。
    Qt Quick Controls 2: TextArea 是一个可选择性附加到Flickable以提供滚动功能的简单多行editor。这就允许TextArea用于可滚动的页面而不会出现嵌套的可滚动区域,解决了可用性问题。
    TextField TextField    
    ToolBar ToolBar    
    ToolButton ToolButton    
    TreeView    
    Qt Quick Dialogs Qt Quick Controls 2 备选方案 备注
    Dialog Dialog Qt Quick Dialogs: Dialog可以是一个顶层窗口或者是一个基于Item的弹出内容,这取决于所在的平台是否支持多个顶层窗口。 
    Qt Quick Controls 2: Dialog不是顶层窗口,而是堆叠在程序内容之上的基于Item的弹出内容,因此,dialog会被限制在窗口范围内。
    ColorDialog,
    FileDialog,
    FontDialog,
    MessageDialog
    ColorDialog,
    FileDialog,
    FolderDialog,
    FontDialog,
    MessageDialog
    (Qt Labs Platform)
    Qt Quick Dialogs: Dialog在支持Qt平台抽象层实现的平台上是原生的.其他平台上使用Qt Widgets或者基于QML的dialog,这取决与其所在的平台是否支持多个顶层窗口。
    Qt Labs Platform: 实验性的原生dialog,在不支持Qt平台抽象层实现的平台上,fallback到Qt Widgets。
    Qt Quick Extras Qt Quick Controls 2 备选方案 备注
    CircularGauge    
    DelayButton DelayButton    
    Dial Dial    
    Gauge    
    Picture    
    PieMenu    
    StatusIndicator    
    ToggleButton    
    Tumbler,
    TumblerColumn
    Tumbler   Qt Quick Extras: Tumbler可以包含多列。 
    Qt Quick Controls 2: Tumbler代表一个单独的滚轮。多列的可以由多个Tumbler排列在一起组成。
    之前没有的 Qt Quick Controls 2 备选方案 备注
    AbstractButton    
    ActionGroup ExclusiveGroup
    (Qt Quick Controls 1)
    Qt Quick Controls 1: ExclusiveGroup 提供类似功能
    ButtonGroup ExclusiveGroup
    (Qt Quick Controls 1)
    Qt Quick Controls 1: ExclusiveGroup 提供类似功能
    CheckDelegate    
    Container    
    Control    
    Drawer    
    Frame    
    ItemDelegate    
    Page    
    PageIndicator    
    Pane    
    Popup    
    RadioDelegate    
    RangeSlider    
    RoundButton    
    ScrollBar,
    ScrollIndicator
    ScrollView
    (Qt Quick Controls 1)
    Qt Quick Controls 1: ScrollView提供了类似的功能。它结合了水平跟竖直的scrollbar,还有环绕这scroll view的背景页面。
    StandardPaths
    (Qt Labs Platform)
    Qt Quick Dialogs: FileDialog提供了方便读取大部分标准路径的快捷属性。
    Qt Labs Platform: StandardPaths提供了独立的类型以提供访问标准路径的方法。
    SwipeDelegate    
    SwipeView    
    SwitchDelegate    
    SystemTrayIcon
    (Qt Labs Platform)
    Qt Labs Platform: SystemTrayIcon 是一个实验性的系统原生的system tray icon。在不支持Qt平台抽象层实现的平台上会fallback到Qt WIdgets。
    TabBar,
    TabButton
    TabView
    (Qt Quick Controls 1)
    Qt Quick Controls 1: TabView提供了类似的方法。它由tab bar,背景和围绕tab的页面组成。
    ToolSeparator    
    ToolTip   Qt Quick Controls 1: Button 和 Action有内建的基于Qt Widgets的tooltips。
    Qt Quick Controls 2: ToolTip可以附加到任何的Item上。

    原文链接

    https://blog.csdn.net/MatchYang/article/details/79302172

  • 相关阅读:
    ios开发 MJExtension
    ios开发 time profile用法
    ios开发 UIApplication
    ios AFNetWorking
    ios开发 为什么NSString、NSArray、NSDIctionary用copy修饰
    ios动画
    ios开发GCD
    重要链接
    记录,员工关心的内容。
    怎样用 Wise Installation System 制作汉化补丁?(转)
  • 原文地址:https://www.cnblogs.com/findumars/p/9525462.html
Copyright © 2011-2022 走看看