导语

文本显示是界面开发必不可少的内容,在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.ElideMiddleText.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.WrapAnywhereText.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.RaisedText.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 的宽度和高度以后,可以通过 horizontalAlignmentverticalAlignment 来设置文本内容的对齐方式,水平方向包括:Text.AlignLeftText.AlignRightText.AlignHCenterText.AlignJustify;垂直方向包括:Text.AlignTopText.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: "Hello World!"}Text {    font.pointSize: 24    textFormat: Text.StyledText    text: "Hello World!"}Text {    font.pointSize: 24    textFormat: Text.RichText    text: "Hello World!"}Text {    font.pointSize: 24    textFormat: Text.PlainText    text: "Hello World!"}

效果如下图所示:

结语

这里列举了 Text 项目相关的一些常用属性设置,然而,还有很多功能和属性没能涉及,大家可以在需要使用的时候参阅 Text 的帮助文档。

相关文章推荐

第8篇 Qt Quick入门教程之基础(八)定位布局

第7篇 Qt Quick入门教程之基础(七)Rectangle和坐标系统

style 字体加粗_第9篇 Qt Quick入门教程之基础(九)文本显示和字体相关推荐

  1. python中字体加粗_全网python中xticks字体加粗搜索-第二电脑网

    第二电脑网 网页 电脑论坛 电脑知识 搜吧 问问 博客 新闻 更多» soso.mark('logo_start'); soso.mark('logo_end'); 帮助 | 第二电脑网为主页 | 提 ...

  2. pyqt怎么给字体加粗_微信拍一拍可设置后缀?怎么用?还有更多新功能!

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,如有侵权,请联系删除谢谢. 微 ...

  3. android 字体加粗_华为nova发布新字体LOGO,设计把我酷到了!

    文章来源:LOGO大师6月份已经过了快一半了 这也就意味着 2019年快过了一半了 ........ 要说今年小编最大的感受是什么 莫过于今年各大品牌换LOGO,越来越任性了 怎么说--? 先是任性的 ...

  4. netdxf 字体加粗_怎样将cad转换成pdf字体变粗

    CAD软件输出的标准文件格式是DWG格式,有时候也输出DXF格式,但有时候需要把CAD图纸转换成PDF格式,这样更加有利于传播和多平台播放.但是很多人可能都不知道该如何去把CAD的图纸转换为PDF,那 ...

  5. c# npoi 2.5版本设置字体加粗_巨巨巨巨推荐:SCI翻译神器,大版本更新来了

    原标题:巨巨巨巨推荐:SCI翻译神器,大版本更新来了 来源丨软件通 ← 推荐关注 软件简介 CopyTranslator是一款小通见人就推荐的翻译软件.内置谷歌翻译.有道.百度.搜狗等主流的翻译器,翻 ...

  6. ireport 5.6.0 添加 Conditional Style 动态加粗字体

    1.添加styles,名为style1: 2.添加condition styles,添加两个condition style,分别名为 style1和style2: 3.设置condition styl ...

  7. Android字体加粗,UI小姐姐说太粗了,解决办法

    最近开发Android App,UI小姐姐验收的时候说,嗯,你这个字体没加粗呀 我说,好的,textStype="bold",然后屁颠屁颠的跑去给UI小姐姐看 结果UI小姐姐说,这 ...

  8. HTML中如何将字体加粗-前端入门

    在HTML中要将字体加粗我们有两种方法,一种是利用b标签:另一种是利用strong标签,本篇文章我们就来介绍一下HTML中b标签和strong标签的用法. b标签和strong标签虽然都是可以让字体加 ...

  9. php导出excel字体加粗,phpexcel 导出格式,字体调整

    对于小数量数据(低于1000)条,如果出现导出较慢,或者网页超时,那可能是phpexcel样式文件写错地方了,可能和数据混在一起,导致较慢. 如果数据太多导致超时或者内存溢出,可添加 set_time ...

最新文章

  1. 【全网之最】用JavaScript写一个最简短的语句实现从A数组中去除B数组中相同元素
  2. 【数据结构与算法】之深入解析“复原IP地址”的求解思路与算法示例
  3. 解决 Maven 报错 Non-resolvable parent POM ... was cached in the local repository, resolution will not be
  4. Julia :迎接0.6的到来
  5. oracle 11g rac进程起停
  6. c#编写闭合导线简易平差程序
  7. linux虚拟键盘onboard设置,求助,安装屏幕虚拟键盘onboard出错。
  8. EFUCMSE16小说漫画系统搭建教程
  9. linux进程间通信——netlink
  10. 蓝桥杯—日志统计—跟外卖店优先级比较类似
  11. Ubuntu下使用ss-local+simple-obfs
  12. 电子驻车系统(拉索式)
  13. JAVA:实现binary exponentiation二进制幂运算算法(附完整源码)
  14. 120道java最常问面试题!
  15. 天梯赛练习集 L2-021 点赞狂魔(25分)含测试点解析
  16. python: float64与float32转换、压缩比较与转换偏差
  17. 北京理工计算机学院夏令营机试,北京理工大学计算机近几年机试真题及题解 上...
  18. 解决wps工作簿从文本中复制粘贴时单元格中首位0无法显示
  19. 如何快速阅读verilog代码?
  20. iOS 图表工具charts之BarChartView

热门文章

  1. 填坑-十万个为什么?(18)
  2. angularjs中的数据绑定
  3. 使用NPM和Nodejs编写编译工具
  4. Thinapp的昨天,今天和明天
  5. 整理的几个常用的数据库维护的脚本
  6. TCP/IP常用端口说明
  7. node开发命令行脚本
  8. UML与软件建模 第五次作业
  9. 孔维滢201771010110《面向对象程序设计(java)》第一周学习总结
  10. weex npm 报错 cb() never called!