QML學習(四)——


文本顯示是界面開發必不可少的內容,在Qt Quick模塊中提供了 Text 項目來進行文本的顯示,其中可以使用 font 屬性組對文本字體進行設置。這一篇我們來看看它們的具體使用。

使用字體

就像前面教程中提到過的,在文本中可以使用 font 屬性組來設置字體,常用的屬性如下:

  • font.bold:是否加粗,取值為true或false
  • font.capitalization:大寫策略,取值為
    • Font.MixedCase不改變大小寫(默認值);
    • Font.AllUppercase全部大寫;
    • Font.AllLowercase全部小寫;
    • Font.SmallCaps小型大寫字母(即小寫字母變為大寫但不改變字體原始的大小);
    • Font.Capitalize:首字母大寫
  • font.family:字體族,取值為字體族的名字(區分大小寫)
  • font.italic:是否斜體,取值為true或false
  • font.letterSpacing:字符間距,正值加大間距,負值減小間距
  • font.pixelSize:字號大小,取值為整數(單位為像素,依賴於設備)
  • font.pointSize:字號大小,取值為大於0的值(是設備無關的)
  • font.strikeout:是否有刪除線,取值為true或false
  • font.underline:是否有下划線,取值為true或false
  • font.weight:字體重量,取值為Font.Thin、Font.Light、Font.ExtraLight、Font.Normal(默認)、Font.Medium、Font.DemiBold、Font.Bold、Font.ExtraBold 和 Font.Black
  • font.wordSpacing:單詞間距,正值加大間距,負值減小間距

我們可以直接使用點表示法來使用一個屬性,也可以使用組表示法來一次指定多個屬性,建議使用組表示法,這樣代碼的可讀性更好。下面來看一個示例:

Text {
    id: text1
    anchors.centerIn: parent
    text: "hello qt! Hello World!"
}

Text {
    id: text2
    anchors.top: text1.bottom
    anchors.topMargin: 10
    anchors.horizontalCenter: text1.horizontalCenter
    text: "hello qt! Hello World!"

    font.weight: Font.ExtraBold
    font.pointSize: 20
    font.letterSpacing: 3
    font.wordSpacing: 6
    font {
        capitalization: Font.AllLowercase
        italic: true
        underline: true
    }
    font.family: webFont.name
    FontLoader {
        id: webFont
        source: "http://qter-images.qter.org/other/myfont.ttf"
        onStatusChanged: if (webFont.status == FontLoader.Ready)
                                 console.log('Loaded')
    }
}

這里最后使用了 FontLoader 類型來加載一個字體,可以通過設置 source 屬性來指定一個字體名稱或者網絡 url 地址,比如這里使用了網上的一個 ttf 字體,當使用網絡字體時,可以通過 status 屬性來獲取加載的狀態。下圖是運行效果。

文本裁剪

Text 項目是可以設置寬度的,當里面的文本內容超出 Text 的寬度時,可以使用 clip 屬性設置文本是否被裁剪。下面來看一個例子:

Column{
    anchors.centerIn: parent
    spacing: 5

    Rectangle {
        width: 186; height: 30
        color: "lightblue"

        Text {
            text: "hello qt! Hello World!"
            font.pointSize: 15
        }
    }
    Rectangle {
        width: 186; height: 30
        color: "lightblue"

        Text {
            text: "hello qt! Hello World!"
            font.pointSize: 15
            width: 186
            clip: true
        }
    }

    Rectangle {
        width: 186; height: 30
        color: "lightgreen"

        Text {
            anchors.centerIn: parent
            text: "hello qt! Hello World!"
            font.pointSize: 15
        }
    }

    Rectangle {
        width: 186; height: 30
        color: "lightgreen"

        Text {
            anchors.centerIn: parent
            text: "hello qt! Hello World!"
            font.pointSize: 15
            width: 186
            clip: true
        }
    }
}

運行效果如下圖所示。

 

文本省略

如果使用 clip 屬性,當文本超出邊界后會被突然截斷,這樣可能在邊界只顯示了單詞或字母的局部,非常不友好。在 Text 中還提供了 elide 屬性,可以通過省略文本的部分內容來匹配文本的寬度,其取值包括Text.ElideNone (默認)Text.ElideLeftText.ElideMiddle 和 Text.ElideRight ,需要注意的是,該屬性也是在設置了 Text 寬度時才有作用。下面看一段示例代碼:

Column{
    anchors.centerIn: parent
    spacing: 5

    Rectangle {
        width: 186; height: 30
        color: "lightblue"

        Text {
            width: 186
            text: qsTr("hello qt! Hello World!文本省略")
            font.pointSize: 15
            elide: Text.ElideLeft
        }
    }

    Rectangle {
        width: 186; height: 30
        color: "lightblue"

        Text {
            width: 186
            text: qsTr("hello qt! Hello World!文本省略")
            font.pointSize: 15
            elide: Text.ElideMiddle
        }
    }

    Rectangle {
        width: 186; height: 30
        color: "lightblue"

        Text {
            width: 186
            text: qsTr("hello qt! Hello World!文本省略")
            font.pointSize: 15
            elide: Text.ElideRight
        }
    }
}

運行效果如下圖所示。

文本換行

對於過長的文本,除了進行省略以外,也可以使用 wrapMode 來設置換行,可用的換行模式包括:Text.NoWrap (默認) 、Text.WordWrapText.WrapAnywhere 和Text.Wrap。當設定了 Text 的高度 height,或者最大行數 maximumLineCount 后,換行和省略可以同時使用。下面來看一個例子,在前面代碼的基礎上繼續添加如下代碼:

Rectangle {
    width: 186; height: 50
    color: "lightgreen"

    Text {
        width: 186
        text: qsTr("hello qt! Hello World!文本換行")
        font.pointSize: 15
        wrapMode: Text.WordWrap
    }
}

Rectangle {
    width: 186; height: 50
    color: "lightgreen"

    Text {
        width: 186
        text: qsTr("hello qt! Hello World!文本換行")
        font.pointSize: 15
        wrapMode: Text.WrapAnywhere
    }
}

Rectangle {
    width: 186; height: 50
    color: "lightgreen"

    Text {
        width: 186; height: 50
        text: qsTr("hello qt! Hello World!文本換行的同時也可以省略")
        font.pointSize: 15
        wrapMode: Text.WrapAnywhere
        elide: Text.ElideRight
    }
}

運行效果如下圖所示。

文本樣式

使用 Text 的 style 屬性可以設置文本的樣式,包括:Text.Normal(默認)Text.OutlineText.Raised 和 Text.Sunken ,下面是示例:

Row { 
    spacing: 10

    Text { font.pointSize: 24; text: "Normal" }

    Text { font.pointSize: 24; text: "Raised"; color: "white"
        style: Text.Raised; styleColor: "blue" }

    Text { font.pointSize: 24; text: "Outline";
        style: Text.Outline; styleColor: "red" }

    Text { font.pointSize: 24; text: "Sunken"; color: "white"
        style: Text.Sunken; styleColor: "black" }
}

運行效果如下圖所示。

對齊方式

當設置了 Text 的寬度和高度以后,可以通過 horizontalAlignment 和 verticalAlignment 來設置文本內容的對齊方式,水平方向包括:Text.AlignLeft、 Text.AlignRight、 Text.AlignHCenter 和 Text.AlignJustify;垂直方向包括:Text.AlignTop、 Text.AlignBottom  和 Text.AlignVCenter 。下面是示例代碼:

Rectangle {
    width: 300; height: 50
    color: "gold"

    Text {
        width: 300; height: 50
        text: qsTr("hello qt! Hello World!")
        font.pointSize: 15
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignBottom
    }
}

運行效果如下圖所示。

顯示富文本

Text 項目除了顯示純文本以外,也可以顯示富文本。通過 textFormat 屬性可以設置文本格式,包括:

  • Text.AutoText (默認):自動判斷以什么樣式來進行顯示;

  • Text.PlainText:以純文本進行顯示;

  • Text.StyledText:是一種支持基本文本樣式標簽的優化格式,例如HTML 3.2中的標簽:

    <b></b> <strong></strong> <i></i> <br> <p> <u> <font color="color_name" size="1-7"></font> <h1> to <h6> <a href=""> <img src="" align="top,middle,bottom" width="" height=""> <ol type="">, <ul type=""> , <li> <pre></pre> > < &
  • Text.RichText:可以顯示富文本,支持 HTML 4 規范的標簽,具體支持的標簽內容可以在幫助 Supported HTML Subset 文檔種進行查看。為了獲取更好的性能,建議使用 Text.PlainText 或 Text.StyledText 。

下面是示例代碼:

Text {
    font.pointSize: 24
    text: "<b>Hello</b> <i>World!</i>"
}
Text {
    font.pointSize: 24
    textFormat: Text.StyledText
    text: "<b>Hello</b> <i>World!</i>"
}
Text {
    font.pointSize: 24
    textFormat: Text.RichText
    text: "<b>Hello</b> <i>World!</i>"
}
Text {
    font.pointSize: 24
    textFormat: Text.PlainText
    text: "<b>Hello</b> <i>World!</i>"
}

效果如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM