使用text属性指定ToolButton的图标

时间:2018-02-03 01:51:27

标签: qt unicode qml qtquick2 qtquickcontrols2

在stack-view Qt快速应用程序的内置模板中,工具按钮定义为:

    ToolButton {
        id: toolButton
        text: stackView.depth > 1 ? "\u25C0" : "\u2630"
        font.pixelSize: Qt.application.font.pixelSize * 1.6
        onClicked: {
            if (stackView.depth > 1) {
                stackView.pop()
            } else {
                drawer.open()
            }
        }
    }

使用" text"成员指定unicode字符" \ u25C0"作为图标。为什么要使用" text"而不是" icon"?有什么优势吗?

Qt中是否有完整的unicode列表?我已经尝试了http://www.unicode.org/charts,但它并不总是有用。在texteditor的例子中,还有另一个unicode角色" \ uE800"标记为" icon-bold",但当我在http://www.unicode.org/charts查找时,它标记为"私人使用区"并且没有提供清单。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

为什么要使用" text"而不是" icon"?有什么优势吗?

优点:

  • 您不需要提供图标图片。

    应用程序可以在任意数量的不同显示器上运行,每个显示器具有不同的DPI等。这意味着如果您使用位图(例如PNG)资产而不是矢量(例如SVG)资产,则最终需要如果您的目标是高DPI显示,则提供大量资产。例如,要将设备像素比率最高为4的显示器定位:

    • pause-icon.png
    • pause-icon@2x.png
    • pause-icon@3x.png
    • pause-icon@4x.png

    大多数应用程序(例如Sketch)都支持以各种比例因子导出,这使得这更容易,但如果您的目标设备在内存方面受到限制(与嵌入式设备一样),您还需要考虑这些因素额外资产会增加已部署应用程序的大小。

    通过使用文字,您可以免费获得平滑缩放。

  • 它会自动使用当前样式的字体颜色。

    在Qt 5.10之前,您需要确保图标的颜色对于运行应用程序的每种样式都是正确的。要查看此示例,请比较图像here。 Material样式由于其使用的颜色需要自己的资产,否则一些图标将是例如在黑暗的背景上黑暗。

    这意味着上面的资产列表只会增加大小,具体取决于应用程序支持的样式数量。对于大多数应用程序来说,这不是一个问题,因为它们通常带有一种预定义的样式。

    然而,从Qt 5.10开始,AbstractButton具有icon.color属性,您可以使用它来对图标进行着色,并使用与字体颜色相同的颜色,这意味着您不需要提供这些额外的颜色/样式特定资产。所以这一点与5.10无关。

缺点:

  • 如果不使用特定字体(如stack template中所示),图标最终可能与您的想法不同。

    在这种情况下,字体将以应用程序碰巧运行的任何字体呈现。这使您的图标受用户环境的影响;什么是一个漂亮的后箭头看起来可能与预期不同(例如太薄)。

对于Creator,模板创建时的选项是:

  1. 使用Unicode字符而不指定字体,避免必须:
    • 捆绑包FontAwesome与每个用户的新应用程序,但受到字体渲染的摆布。
    • 提供大量资产的DPI变体,以考虑可能运行该应用程序的所有显示。
  2. Ship FontAwesome。
  3. 提供位图图标,确保样式/颜色特定的变体可用,以防应用程序以不同的样式运行。
  4. 现在5.10已经出局,#3可能是更好的选择。

      

    Qt中是否有完整的unicode列表?

    不,您需要使用您提到的网站。

      

    在texteditor示例中,还有另一个unicode角色" \ uE800"标记为" icon-bold",但当我在http://www.unicode.org/charts查找时,它标记为"私人使用区"并且没有提供清单。

    文本编辑器示例通过fontello使用FontAwesome,这是一个允许您选择特定FontAwesome字符放入最小字体文件的站点。字体文件为here

    您在此示例中看到的Unicode字符是FontAwesome特定的。