目录
QLabel
可以用来显示文本和图片
核心属性如下
属性 | 说明 |
text | QLabel中的文本 |
textFormat | 文本的格式.
|
pixmap | QLabel内部包含的图片. |
scaledContents | 设为true表示内容自动拉伸填充QLabel 设为false则不会自动拉伸 |
alignment | 对齐方式. 可以设置水平和垂直方向如何对齐. |
wordwrap | 设为true内部的文本会自动换行. 设为false则内部文本不会自动换行. |
indent | 设置文本缩进.水平和垂直方向都生效. |
margin | 内部文本和边框之间的边距. 不同于于indent,但是是上下左右四个方向都同时有效. 而indent最多只是两个方向有效(具体哪两个方向有效取决于alignment) |
ope nExternalLi nks | 是否允许打开一个外部的链接. (当QLabel文本内容包含uri的时候涉及到) |
buddy | 给QLabel关联一个”伙伴” ••这样点击QLabel时就能激活对应的伙伴. 例如伙伴如果是一个QCheckBox,那么该QCheckBox就会被选中. |
Qt::PlainText 纯文本-----------最普通的文本
Qt::RichText 富文本(支持 html 标签) 内容更丰富的文本, 支持 html
word 工具, 编辑的文件, 就可以认为是一种富文本
Qt::MarkdownText markdown 格式作为程序猿,markdown 是一个非常常用的书写文档的格式
提供了各种特殊符号,表示不同的样式/格式
Qt::AutoText 根据文本内容自动决定文本格式
咱们中文环境一般都是靠左/居中对齐的
有些其他的语言环境就是靠右对齐的~~
QLabel 是不会给咱们自动提供滚动条的(假如文本内容:一段很长很长很长的文字一段很长很长很长的文字一段很长很长很长的文字)
有的控件,QTextEdit (多行编辑框)提供
专业俗语 通俗意义上说的
url 网址
计算机 电脑
目录 文件夹
代码示例:显示不同格式的文本
1)在界面上创建三个 QLabel
尺寸放大一些.obiectName 分别为label,label 2,label 3
2)修改 widget.cpp,设置三个 label的属性
3)运行程序,观察效果
代码示例: 显示图片
虽然 QPushButton 也可以通过设置图标的方式设置图片,但是并非是一个好的选择.更多的时候
还是希望通过 QLabe 来作为一个更单纯的显示图片的方式
1)在界面上创建一个 QLabel,objectName 为 label
2)创建 resource.qrc 文件,并把图片导入到 qrc 中
3)修改 widget.cpp,给 QLabel设置图片
执行程序,观察效果
1 // 设置内容伸缩
2 ui->label->setScaledContents(true);

5) 此时, 如果拖动窗⼝⼤⼩, 可以看到图⽚并不会随着窗⼝⼤⼩的改变⽽同步变化.
在代码中直接写死某个数值,这样的做法称为“硬编码
ui->label->setGeometry(0,0, windowRect.width(),windowRect.height());
在上面代码中是在构造函数里,进行的这样的尺寸设置
这个设置相当于是“一次性的
一旦程序运行起来之后,QLabel 的尺寸就固定下来了
窗口发生改变,此时,QLabel 是不会变化的~~为了解决这个问题, 可以在 Widget 中重写 resizeEvent 函数.
1 // 重写 resizeEvent. 这个函数会在窗⼝⼤⼩发⽣改变时被⾃动调⽤ .2 void Widget:: resizeEvent (QResizeEvent *event) {3 // 可以直接通过 this->width() 和 this->height() 设置 label 新的尺⼨ , 也可以通过event 参数拿到新的尺⼨ .4 // ui->label->setGeometry(0, 0, this->width(), this->height());5 ui->label-> setGeometry ( 0 , 0 , event-> size (). width (), event-> size (). height ());67 qDebug () << event-> size ();8 }


注意:
此处的 resizeEvent 函数我们没有手动调用,但是能在窗口大小变化时被自动调用
这个过程就是依赖 C++ 中的多态来实现的.Qt 框架内部管理着 QWidget 对象表示咱们的窗
口.在窗口大小发生改变时,Qt 就会自动调用 resizeEvent 函数
但是由于实际上这个表示窗口的并非是 QWidget,而是 Widget 的子类,也就是咱们自己写
的 Widget.此时虽然是通过父类调用函数,但是实际上执行的是子类的函数(也就是我们重写
后的 resizeEvent )
此处属于是 多态 机制的一种经典用法.通过上述过程,就可以把自定义的代码,插入到框架内
部执行.相当于“注册回调函数”
事件
用户的操作,会对应一些信号~~
Qt 中,表示用户的操作,有两类概念
一个是信号,另一个是事件~~
当用户拖拽修改窗口大小的时候,就会触发 resize 事件 (resizeEvent)
像 resize 这样的事件,是连续变化的.把窗口尺寸从 A 拖到 B 这个过程中,会触发出一系列的 resizeEvent.
此时就可以借助 resizeEvent 来完成上述的功能
可以让 Widget 窗口类,重写父类(QWidget) 的 resizeEvent 虚函数
在鼠标拖动窗口尺寸的 过程中 这个函数就会被反复
调用执行~~
每次触发一个 resizeEvent 事件都会调用一次对应
的虚函数~~
由于此处进行了函数重写,调用父类的虚函数就会实际调用到子类的对应的函数
(多态)
在实际编程中,指定回调函数其实有很多种写法
1) 设置函数指针
2) 设置仿函数(函数对象)
3) 设置lambda
4)通过重写父类虚函数~~(框架中拿着父类的指针调用这个函数.如果你创建了子类重写了这个函数,此时在多态机制下,实际执行的就是子类的函数了)
5) Qt 的信号槽~~
代码示例:文本对齐,自动换行,缩进,边距
1)创建四个label,objectName 分别是 label 到 abel 4
并且在 QFrame 中设置 frameshape 为 Box(设置边框之后看起来会更清晰一些)
QFrame 是 QLabel 的父类,其中 frameshape 属性用来设置边框性质
QFrame::Box : 矩形边框
QFrame::Panel : 带有可点击区域的面板边框
QFrame::WinPanel : Windows风格的边框
QFrame::HLine :水平线边框
QFrame::VLine : 垂直线边框
QFrame::StyledPanel : 带有可点击区域的面板边框,但样式取决于窗口主题
在 Qt Creator 右侧属性编辑区,能够看到类之间的继承关系
QLabel 继承自 QFrame, QFrame 继承自 QWidget
2)编写 widget.cpp,给这四个label设置属性
Ot::AlignHCenter | Qt: :AlignVCenter)
| :C++ 中叫做按位或运算
3)运行程序,可以看到如下效果
第一个label 右上对齐
第二个label设置了 wordWrap,能够自动换行
第三个label设置了Indent,左侧和上方和边框有间距,右侧则没有
此处设置的缩进即使文本换行了,后续的行也会产生缩进
不仅仅是首行缩进~~前端中,CSS 也能设置缩进text-indent 属性----首行缩进~~(符合段落首行缩进常规格式)
第四个label设置了margin,四个方向均有间距
代码示例: 设置伙伴
1)创建两个label和两个radioButton.
objectName 分别问 label,label_2,radioButton ,radioButton_2
此处把 label中的文本设置为“快捷键 &A”这样的形式
其中& 后面跟着的字符,就是快捷键
可以通过 alt + A的方式来触发该快捷键
但是注意,这里的快捷键和 QPushButton 的不同.需要搭配 alt 和 单个字母的方式才能触
发
2)编写 widget.cpp,设置 buddy 属性
当然这里也可以使用 Qt Designer 直接设置
3)运行程序,可以看到,按下快捷键 alt +a 或者 alt +b,即可选中对应的选项
QLabel 伙伴~~
Qt 中,QLabel 中写的文本,是可以指定“快捷键
此处快捷键的规则功能上要比 QPushButton 弱很多
是在文本中使用 & 跟上一个字符来表示快捷键
比如 &A => 通过键盘上的 alt + a 来发这个快捷键
&B => 通过键盘上的 alt + b 来触发
绑定了伙伴关系之后,通过快捷键就可以选中对应的单选按钮/复选按钮~~