Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Unsolved On-the-fly font substitution is awesome! How to turn it off?

    QML and Qt Quick
    1
    1
    538
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stan.m last edited by stan.m

      Is it possible to turn off on-the-fly font substitution? How does it even work?

      I'm trying to pick a font that supports a unicode subscript two: ₂ (U+2082). I am putting chemical formulas like H₂O in translatable text and need to find a good looking font that I can embed in my QtQuick application.

      My favorite font manager shows an empty box when a font does not support subscript two, but I have to click through the fonts one at a time... I want to go through about 300 fonts. This is tedious.

      So I had the bright idea to write a QML font viewer. Amazingly, every font supports subscript two. I look closer and many fonts are using the same glyph for the subscript two.

      It seems that QtQuick substitutes a suitable font when a glyph is missing from the requested font. It is amazing that the framework is capable of this on-the-fly without any code on my part. But I still don't know what font to embed in my application to that it will display consistently on another system.

      Can anyone tell me how to turn off on-the-fly font substitution in a QtQuick application? If not, can someone point me in the right direction so I can understand this magic?

      For reference, here is my font viewer code:

      import QtQuick 2.0
      import QtQuick.Window 2.0
      import QtQuick.Controls 1.0
      
      Window {
          visible: true
          width: 600; height: 800
      
          TextField {
              id: sampleText
              anchors { left: parent.left; right: parent.right; top: parent.top }
              text: qsTr('H₂O + C₁₂H₂₂O₁₁ = sugar water')
          }
          ListView {
              anchors { left: parent.left; right: parent.right; top: sampleText.bottom; bottom: parent.bottom }
              model: Qt.fontFamilies()
              clip: true
      
              delegate: Rectangle {
                  height: Math.max(output.contentHeight, name.contentHeight)
                  width: ListView.view.width
                  color: (index % 2) ? '#DEF' : 'white'
      
                  Text {
                      id: name
                      anchors { left: parent.left; verticalCenter: parent.verticalCenter }
                      width: parent.width / 4
                      elide: Text.ElideRight
                      font.pointSize: 12
                      text: modelData
                  }
                  Text {
                      id: output
                      anchors { left: name.right; right: parent.right; verticalCenter: parent.verticalCenter }
                      elide: Text.ElideRight
                      font { pointSize: 24; family: modelData }
                      text: sampleText.text
                  }
              }
          }
      }
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post