Qt QTextEdit设置行间距和段间距

段间距比较容易实现,通过设置html的css即可实现段间距调整;

行间距需要利用Qt用的几个类配合实现;

代码比较简单具体实现如下:

QString HD = ui->H1Edit->text();//行间距
    QString HH = ui->H2Edit->text();//段间距

    QString src = ui->textEdit->toHtml();
    QString strView;
    //=ui->textEdit->toPlainText();

    strView = "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;\"></body></html>";

    int pos = 0;

    //padding-top

    //获取段落
    int startNum = src.indexOf("<p",0);
    int endNum = src.lastIndexOf("</body>");

    QString txt = src.mid(startNum,endNum);

    //更改段间距
    const QString StrHH = "margin-top:";

    pos = 0;

    for(;;)//已知bug 段距大于10
    {
        pos = txt.indexOf(StrHH,pos+1);
        if(pos!=-1)
        {
            txt.replace(pos+StrHH.length(),1,HH);
        }else
        {
            break;
        }
    }


    int despos = strView.lastIndexOf("</body>");
    strView.insert(despos,txt);
    ui->textEdit->clear();

    ui->textEdit->setHtml(strView);

    QTextDocument *doc =  ui->textEdit->document();

    QTextCursor textcursor = ui->textEdit->textCursor();

        for(QTextBlock it = doc->begin(); it !=doc->end();it = it.next())
        {

            QTextBlockFormat tbf = it.blockFormat();
            tbf.setLineHeight(HD.toInt(),QTextBlockFormat::LineDistanceHeight);
            textcursor.setPosition(it.position());
            textcursor.setBlockFormat(tbf);
            ui->textEdit->setTextCursor(textcursor);
        }

其中段间距有bug是设置插入字符串位置的问题。需要用的自行解决。

源码下载

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中,可以使用 Font 类的 deriveFont() 方法来设置字体间距,具体方式如下: ```java Font font = new Font("Arial", Font.PLAIN, 24); float letterSpacing = 0.2f; // 设置字体间距为 0.2f Font spacedFont = font.deriveFont(Map.of(TextAttribute.TRACKING, letterSpacing)); ``` 在上面的示例中,我们首先创建了一个普通的字体对象 font,并设置了字体名称、字体样式和字体大小。然后,我们使用 Font 类的 deriveFont() 方法,传入一个 Map 对象,来设置字体间距。其中,Map 的 key 值为 TextAttribute.TRACKING,value 值为字体间距大小(以浮点数表示)。返回值 spacedFont 就是间距为 0.2f 的字体对象。 另外,如果你想要设置更加细致的字体间距,可以使用 Font 类的 deriveFont() 方法,传入一个 TextAttribute.TRACKING 对象,来设置字体间距。具体方式如下: ```java Font font = new Font("Arial", Font.PLAIN, 24); float letterSpacing = 0.2f; // 设置字体间距为 0.2f Map<TextAttribute, Object> attributes = new HashMap<>(); attributes.put(TextAttribute.TRACKING, letterSpacing); Font spacedFont = font.deriveFont(attributes); ``` 在上面的示例中,我们创建了一个空的 Map 对象 attributes,并将 TextAttribute.TRACKING 和字体间距大小放入其中。然后,我们使用 Font 类的 deriveFont() 方法,传入 attributes 对象,来设置字体间距。返回值 spacedFont 就是间距为 0.2f 的字体对象。 通过设置字体间距,可以让文本更加美观和易读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值