QTextEdit更改单个段落/块的字体

c – QTextEdit更改单个段落/块的字体

2019-05-15

使用QTextEdit,我需要单独更改每个段落的字体属性.这类似于当用户从菜单中选择样式(而不是特定格式)时,有多少文字处理器更改段落的字体.

理想情况下,我想在布局和渲染之前将QTextCharFormat(或等效物)应用于块(段落),但我希望文本中不会插入任何字体属性,因为我不希望这样文件中的信息,但我需要保留用户可能设置为段落中的单词的任何粗体/斜体/下划线属性(我打算将所需信息保存在QTextBlock :: userData中).但是,我无法想象我需要插入一个函数来执行此任务.

我想我无法从QTextBlock和QTextCursor更改段落的QTextCharFormat,因为这仅适用于新块,它不会影响具有现有文本的块.

我检查了QTextLayout,但我不认为我的答案在那里.

我几天来一直在寻找这个问题的解决方案.对于任何指向正确方向的人,我都会非常优雅.

我有多年的C经验,但我对Qt有些新意.使用Qt 4.8.

编辑:

我在上面强调了(粗体)我正在尝试做的一个重要部分.换句话说,我真正想做的是能够在显示之前将字体属性应用于文本块(可能是临时副本).我完全习惯于为了实现这个目标而导出和修改(甚至重新实现)我需要的任何类,但我需要指出正确的方向,以确定我实际需要改变什么.作为最后的手段,我还可以直接修改一些Qt类,如果这对于任务是必要的,但是我还需要知道我需要触摸哪个类.我希望这更清楚.我发现很难解释这一点,但不允许告诉你应用程序将完全做什么.

[必需的图书馆]

#include <QTextEdit>    // not needed if using the designer

#include <QTextDocument>
#include <QTextBlock>
#include <QTextCursor>

[战略]

QTextDocument

我需要它来管理块.功能QTextDocument::findBlockByNumber非常方便找到以前的块,我认为这就是你所追求的.

QTextBlock

块文本的容器.一个美好而方便的课程.

QTextCursor

令人惊讶的是,QTextBlock类中没有格式设置器.因此,我使用QTextCursor作为解决方法,因为此类中有四个格式设置器.

[格式代码]

// For block management
QTextDocument *doc = new QTextDocument(this);
ui->textEdit->setDocument(doc);  // from QTextEdit created by the Designer
//-------------------------------------------------
// Locate the 1st block
QTextBlock block = doc->findBlockByNumber(0);

// Initiate a copy of cursor on the block
// Notice: it won‘t change any cursor behavior of the text editor, since it
//         just another copy of cursor, and it‘s "invisible" from the editor.
QTextCursor cursor(block);

// Set background color
QTextBlockFormat blockFormat = cursor.blockFormat();
blockFormat.setBackground(QColor(Qt::yellow));
cursor.setBlockFormat(blockFormat);

// Set font
for (QTextBlock::iterator it = cursor.block().begin(); !(it.atEnd()); ++it)
{
    QTextCharFormat charFormat = it.fragment().charFormat();
    charFormat.setFont(QFont("Times", 15, QFont::Bold));

    QTextCursor tempCursor = cursor;
    tempCursor.setPosition(it.fragment().position());
    tempCursor.setPosition(it.fragment().position() + it.fragment().length(), QTextCursor::KeepAnchor);
    tempCursor.setCharFormat(charFormat);
}

参考:
How to change current line format in QTextEdit without selection?

[DEMO]

构建环境:Qt 4.8 MSVC2010编译器Windows 7 32位

该演示仅用于显示在特定块上设置格式的概念.

纯文本输入

格式1(注意它不会打扰视图中的当前光标)

格式2

原文地址:https://www.cnblogs.com/lehoho/p/11453471.html

时间: 2024-10-10 10:32:03

QTextEdit更改单个段落/块的字体的相关文章

CAD如何插入单个图块

我们在日常的CAD绘图工作中,常常会遇到需要插入单个图块的问题.朋友们都知道,我们创建成功的图块,可以在实际绘图时根据需要插入到图形中使用,在CAD中不仅可插入单个图块,还可连续插入多个相同的图块.小编今天就给大家具体的演示一下,CAD如何插入单个图块呢? 首先我们运行CAD 编辑器专业版(xunjie),然后调用插入图块命令的操作方法,如下: 1.菜单栏:点击菜单栏"插入"-"块"命令选项图标,执行该命令操作后会立刻弹出"插入块"的对话框弹窗.

如何更改UITextField 的placeholder 的字体颜色

storyboard 中这样设置 具体步骤: 1.在User Defined Runtime Attributes中添加一个Key. 2.输入Key Path(这里我们输入_placeholderLabel.textColor). 3.选择Type,有很多种(这里我们选择Color) 4.设置Value(这里出现的是颜色的选择面板,选择想要的颜色即可). 纯代码的话这样子就 OK 啦 //textField的placeholder的背景色更改第一种颜色 _userNameTxf.attribut

Android studio 更改背景和设置代码字体与大小

1,设置字体及大小 2,设置背景主题 原文地址:https://www.cnblogs.com/LIUDAclub/p/10660596.html

更改 pycharm 内置 Terminal 字体大小

Editor -> Colors & Fonts -> Console Font or setting 里搜索 font,一直回车,就找到 terminal font 设置了

JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常

在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前的版本: 1 2 3 4 5 6 7 8 9 10 catch (IOException ex) {      logger.error(ex);      throw new MyException(ex.getMessage()); catch (SQLException ex) {      

eclipse块编辑

1. Windows > Preferences然后键入keys或浏览到General > Keys.根据该键输入filter text的block selection快速找到快捷方式上市toggle block selection.在这里,您可以在快捷方式列选择如你所愿. 2. 您可以通过键盘快捷键启用和禁用列编辑模式ALT-SHIFT-A. 一旦启用您可以在选择文本块,或SHIFT(像一个正常的键盘选择,除了选择现在将在一个块). 如果您改变了默认字体的文本编辑,进入列编辑模式下的屏幕字体

将且仅将UILabel上的所有数字变色指定的字体颜色&lt;转&gt;

先提出一个场景,一个UILabel上面有各种数字字符中文字符以及字母等,现在我们想将其中的数字找出来并且变为和其他字符不同的颜色. 这里提出一个解决方法,通过for循环来截取一个一个字符,判断其是不是0-9的数字,如果是就设置他的字体属性,我们使用了 NSMutableAttributedString实现富文本(带属性的字符串). NSAttributedString的使用方法,跟NSMutableString,NSString类似 1.使用方法: 为某一范围内文字设置多个属性 - (void)

iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)

在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想.后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现. 实例化方法和使用方法 实例化方法: 使用字符串初始化 - (id)initWithString:(NSString *)str; 例: N

【190】修改 PowerShell &amp; CMD 显示字体

方法一:Windows7更改替换cmd(powershell)字体完全方法教程 说明:该方法将字体修改成只能显示英文,对于某些中文会乱码!(chcp 850) 方法二:添加中文字体(chcp 936) 修改注册表在开始运行regedit.exe进入注册表,找到下面的地方HKEY_LOCAL_MACHINE >> SOFTWARE >> Microsoft >> Windows NT >> CurrentVersion >> Console >