zoukankan      html  css  js  c++  java
  • QML编码的一些好的做法

    Qt快速布局要求

    Qt本身提供Qt Quick快速布局, 以可视化方式在布局中排列Qt Quick Item. 与anchors不同,Qt Quick Layouts可以根据窗口大小调整其子项的大小以便布局. 需注意以下事项:

    提倡做法

    • 使用 anchors, width, height 等属性来确定布局相对于其非布局父Item的大小.
    • 使用Layout附加属性设置布局的直接子元素的大小和对齐属性.

    不提倡做法

    • 不要提供Item的implicitWidth和implicitHeight(自定义首选大小), 除非提供的隐含大小不令人满意.
    • 不要在作为布局的直接子项的项目上使用anchors, 但可以使用Layout.preferredWidth和Layout.preferredHeight:
    RowLayout {
        id: layout
        anchors.fill: parent
        spacing: 6
        Rectangle {
            color: 'azure'
            Layout.fillWidth: true
            Layout.minimumWidth: 50
            Layout.preferredWidth: 100
            Layout.maximumWidth: 300
            Layout.minimumHeight: 150
            Text {
                anchors.centerIn: parent
                text: parent.width + 'x' + parent.height
            }
        }
        Rectangle {
            color: 'plum'
            Layout.fillWidth: true
            Layout.minimumWidth: 100
            Layout.preferredWidth: 200
            Layout.preferredHeight: 100
            Text {
                anchors.centerIn: parent
                text: parent.width + 'x' + parent.height
            }
        }
    }
    

    注意:Layout和anchors都是占用更多内存和实例化时间的对象. 当简单地绑定到x、y、width和height属性就足够时, 避免使用它们(尤其是在列表和表格委托以及控件的样式中)

    类型安全

    QML中使用var既简单又方便, 但也有几个缺点需注意:

    property var name
    property var size
    property var optionsMenu
    
    • 如果赋值类型错误, 则报告的错误将指向属性声明的位置, 而不是属性被赋值的位置. 这使得跟踪错误变得更加困难, 从而减慢了开发过程.
    • 无法进行静态分析来捕获上述错误.
    • 属性的实际基础类型并不总是能立即为读者所清楚.
      在这种情况下, 我们尽可能的使用实际类型:
    property string name
    property int size
    property MyMenu optionsMenu
    

    更提倡声明式绑定,而不是命令式赋值

    在QML中, 可以使用命令式JavaScript代码执行诸如响应输入事件, 通过网络发送数据等任务. 命令式代码在QML中占有重要地位, 但重要的是要知道何时不使用它

    例如, 以下命令赋值:

    Rectangle {
        Component.onCompleted: color = "red"
    }
    

    有以下缺点:

    • 它太慢了, 首先用默认值来运算, 然后又用red去求值来替换.
    • 如果有错误, 他将构造时就能发现的错误, 延迟到了运行时.
    • 它会覆盖已存在的声明式绑定, 通常它是有意的, 但也可能是无意的.
      上述代码完全可以改写为声明式绑定:
    Rectangle {
        color: "red"
    }
    

    DPI可扩展的用户界面

    随着显示分辨率的提高,可伸缩的应用程序UI变得越来越重要。实现这一点的方法之一是为不同的屏幕分辨率维护UI的几个副本,并根据可用的分辨率加载适当的副本。尽管这工作得很好,但它增加了维护开销。

    Qt为这个问题提供了更好的解决方案,建议采用:

    • 使用anchors或Qt Quick Layout模块来布局可视Items。
    • 不要为可视Item指定显式的width和height。
    • 为应用程序支持的每个显示分辨率提供诸如图像和图标等UI资源。Qt Quick Controls gallery示例通过为@2x、@3x和@4x分辨率提供Qt-logo.png很好地演示了这一点,使应用程序能够满足高分辨率显示。如果显式启用了高DPI缩放特性,Qt会自动选择适合于给定显示的适当图像.
    • 将SVG图片用于小图标。 虽然较大的SVG渲染速度可能较慢,但较小的SVG效果很好。 矢量图像避免了像位图图像那样需要提供图像的多个版本。
    • 使用基于字体的图标,例如Font Awesome。 这些可以缩放到任何显示分辨率,并且还可以着色。 Qt快速控件文本编辑器示例很好地说明了这一点。

    有了这些,应用程序的UI就可以根据所提供的显示分辨率进行缩放。

    以上文章参考自Qt官方文档: https://doc.qt.io/qt-5/qtquick-bestpractices.html
    依个人理解, 简要翻译, 如有错漏, 欢迎指正.

  • 相关阅读:
    VituralBox 虚拟机网路设置 主机无线
    布局
    Git 安装
    剑指offer——33分行从上到下打印二叉树
    剑指offer——32从上到下打印二叉树
    剑指offer——31序列化二叉树
    剑指offer——30栈的压入、弹出序列
    剑指offer——30包含min函数的栈
    剑指offer——29顺时针打印矩阵
    剑指offer——28对称的二叉树
  • 原文地址:https://www.cnblogs.com/linkyip/p/13153953.html
Copyright © 2011-2022 走看看