有些文章通过计算字符串长度(中文字符为2,非中文字符为1)来进行换行,由于不同字体、不同非中文字符的实际宽度不同,实现出来的换行效果精准度较差,不够美观。下面函数
trimString
利用
measureText()
来计算文本的实际宽度,效果更好。若无法完全展示则会显示至多三个点
'.'
来表示省略,可以通过修改函数中
pointNum
的值来控制点的数量。
text: 待处理的字符串
font: 符合
font语法
的字符串
maxWidth: 文本块最大宽度
maxRowNum: 文本块最大行数
export function trimString(text, font, maxWidth, maxRowNum) {
function getTextWidth(text) {
var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
var context = canvas.getContext("2d");
context.font = font;
var metrics = context.measureText(text);
return metrics.width;
let textRows = []
let textRowCounter = 0
let startIndex = 0
let currRow
let i = 0
for (i; i < text.length; i++) {
currRow = text.slice(startIndex, i + 1)
if (getTextWidth(currRow) > maxWidth) {
textRows[textRowCounter] = text.slice(startIndex, i)
textRowCounter += 1
startIndex = i
if (textRowCounter === maxRowNum) {
break
if (textRows.length < maxRowNum) {
textRows[textRowCounter] = text.slice(startIndex)
else {
if (i < text.length) {
let pointNum = 3
let ellipsisWidth = getTextWidth(Array(pointNum).fill('.').join(''))
while (ellipsisWidth > maxWidth) {
pointNum -= 1
ellipsisWidth = getTextWidth(Array(pointNum).fill('.').join(''))
let ellipsisText = Array(pointNum).fill('.').join('')
for (let j = textRows[maxRowNum - 1].length; j >= 0; j--) {
if (getTextWidth(textRows[maxRowNum - 1].slice(0, j)) + ellipsisWidth <= maxWidth) {
textRows[maxRowNum - 1] = textRows[maxRowNum - 1].slice(0, j) + ellipsisText
break
return textRows.join('\r\n')
export function trimString(text, font, maxWidth, maxRowNum) { function getTextWidth(text) { var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas")); ...
SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图:
SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图_BADAO_LIUMANG_QIZHI的博客-CSDN博客
在上面的基础上实现X周显示时间,但是显示一周7个时间太长显示不开,所以对X轴的label做倾斜处理。
解决办法1:xAxis.axisLabel 属性
axisLabel的类型是object ,主要作用是:坐标轴刻度标签的相关设置。(当然yAxis也是一样有这个属性的) axisLabel: {
```python
from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtCore import Qt
class MyLabel(QLabel):
def __init__(self, parent=None):
super(MyLabel, self).__init__(parent)
self.setAlignment(Qt.AlignCenter)
def mouseDoubleClickEvent(self, event):
if event.button() == Qt.LeftButton:
self.window().showFullScreen() # 双击时全屏
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.label = MyLabel("双击我全屏")
self.setFixedSize(400, 300)
layout = QVBoxLayout()
layout.addWidget(self.label)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication([])
widget = MyWidget()
widget.show()
app.exec_()
在此示例中,我们创建了一个MyLabel类,该类继承自QLabel并重写了mouseDoubleClickEvent方法。如果鼠标左键双击标签,它将调用窗口的showFullScreen方法以全屏显示窗口。我们还创建了一个MyWidget类,该类包含一个MyLabel实例,并将其添加到一个垂直布局中。最后,我们在应用程序中实例化MyWidget并显示它。当您双击标签时,它将全屏显示窗口。