添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

有些文章通过计算字符串长度(中文字符为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并显示它。当您双击标签时,它将全屏显示窗口。