QT5开发及实例学习之十三Qt5文本编辑功能


前言

  在编写包含格式设置的文本编辑程序时,经常用到的 Qt 类有 QTextEdit 、QTextDocument 、QTextBlock 、QTextList 、QTextFrame 、QTextTable 、QTextCharFormat 、QTextBlockFormat 、QTextListFormat 、QTextFrameFormat 和 QTextTableFormat 等。
  文本编辑器各类之间的划分与关系如下图所示:
在这里插入图片描述
  任何一个文本编辑器的程序都要用 QTextEdit 作为输入文本的容器,在它里面输入可编辑文本由 QTextDocument 作为载体,而用来表示 QTextDocument 的元素的 QTextBolck 、QTextList 、QTextFrame 等是 QTextDocument 的不同表现形式,可以表示为字符串、段落、列表、表格或图片等。
  每种元素都有自己的格式,这些格式则用 QTextCharFormat 、QTextBlockFormat 、QTextListFormat 、QTextFrameFormat 等类来描述与实现。例如,QTextBlockFormat 类对应于 QTextBlock 类,QTextBlock 类用于表示一块文本,通常可以理解为一个段落,但它并不仅指段落;QTextBlockFormat 类则表示这一块文本的格式,如缩进的值、与四边的边距等。
  从上图可以看出,用于表示编辑文本中的光标 QTextCursor 类是一个非常重要且经常用到的类,它提供了对 QTextDocument 文档的修改接口,所有对文档格式的修改,说到底都与光标有关。例如,改变字符的格式,实际上指的是改变光标处字符的格式。又例如,改变段落的格式,实际上指的是改变光标所在段落的格式。因此,所有对 QTextDocument 的修改都能够通过 QTextCursor 类实现,QTextCursor 类在文档编辑类程序中具有重要的作用。

  调用 QFontComboBox 的 setFontFilters 接口可过滤只在下拉列表框中显示某一类字体,默认情况下为 QFontComboBox::AllFonts 列出所有字体。
  使用 QFontDatabase 实现在字号下拉列表框中填充各种不同的字号条目,QFontDatabase 类用于表示当前系统中所有可用的格式信息,主要是字体和字号大小。
  调用 standardSizes() 函数返回可用标准字号的列表,并将它们插入到字号下拉列表框中。

  foreach 是 Qt 提供的替代 C++ 中 for 循环的关键字,它的使用方法如下:
  foreach(variable, container):其中,参数 variable 用于表示每个元素的变量;参数 container 表示程序中需要循环读取的一个列表;如:

	foreach(int , QList<int>)
	{
		//process
	}

循环至列表尾结束循环。


一、设置字体

  完成设置选定文字字体的函数如下:

	void ImgProcessor::showFontComboBox(QString comboStr)   //设置字体
	{
	    QTextCharFormat fmt;            //创建一个 QTextCharFormat 对象
	    fmt.setFontFamily(comboStr);    //选择的字体名称设置给 QTextCharFormat 对象
	    mergeFormat(fmt);               //将新的格式应用到光标选区内的字符
	}

  所有对于 QTextDocument 进行的修改都通过 QTextCursor 类来完成,代码如下:

	void ImgProcessor::mergeFormat(QTextCharFormat format)
	{
	    QTextCursor cursor = showWidget->text->textCursor();//获得编辑框中的光标
	
	    if(!cursor.hasSelection())                          //若光标没有高亮选区,则将光标所在处的词作为选区,由前后空格或",""."等标点符号区分词
	        cursor.select(QTextCursor::WordUnderCursor);
	    cursor.mergeCharFormat(format);                     //调用QTextCursor的mergeCharFormat()函数将参数format所表示的格式应用到光标所在处的字符上
	    showWidget->text->mergeCurrentCharFormat(format);   //调用QTextEdit的mergeCurrentCharFormat()函数将格式应用到选区内的所有字符上
	}

二、设置字号

  设置选定文字字号大小的函数代码如下:

	void ImgProcessor::showSizeSpinBox(QString spinValue)   //设置字号
	{
	    QTextCharFormat fmt;
	    fmt.setFontPointSize(spinValue.toFloat());
	    showWidget->text->mergeCurrentCharFormat(fmt);
	}

三、设置文字加粗

  设置选定文字为加粗显示的函数代码如下:

	void ImgProcessor::showBoldBtn()                        //设置文字显示加粗
	{
	    QTextCharFormat fmt;
	    fmt.setFontWeight(boldBtn->isChecked()?QFont::Bold:QFont::Normal);
	    showWidget->text->mergeCurrentCharFormat(fmt);
	}

  其中,调用 QTextCharFormat 的 setFontWeight() 函数设置粗细值,若检测到“加粗”按钮被按下,则设置字符的 Weight 值为 QFont::Bold,可直接设为 75;反之,则设为 QFont::Normal。
  文字的粗细值由 QFont::Weight 表示,它是一个整型值,取值范围可为 0~99,有 5 个预置值,分别为 QFont::Light(25)、QFont::Normal(50)、QFont::DemiBold(63)、QFont::Bold(75)、QFont::Black(87),通常在 QFont::Normal 和 QFont::Bold 之间转换。

四、设置文字斜体

  设置选定文字为斜体显示的函数代码如下:

	void ImgProcessor::showItalicBtn()                      //设置文字显示斜体
	{
	    QTextCharFormat fmt;
	    fmt.setFontItalic(italicBtn->isChecked());
	    showWidget->text->mergeCurrentCharFormat(fmt);
	}

五、设置文字加下画线

  在选定文字下方加下画线的函数代码如下:

	void ImgProcessor::showUnderlineBtn()                   //设置文字加下划线
	{
	    QTextCharFormat fmt;
	    fmt.setFontUnderline(underlineBtn->isChecked());
	    showWidget->text->mergeCurrentCharFormat(fmt);
	}

六、设置文字颜色

  设置选定文字颜色的函数代码如下:

	void ImgProcessor::showColorBtn()                       	//设置文字颜色
	{
	    QColor color = QColorDialog::getColor(Qt::red, this);	//(a)
	    if(color.isValid())
	    {
	        QTextCharFormat fmt;
	        fmt.setForeground(color);
	        showWidget->text->mergeCurrentCharFormat(fmt);
	    }
	}

(a)使用了标准颜色对话框的方式,当单击“颜色”按钮时,在弹出的标准颜色对话框中选择颜色。
  标准颜色对话框 QColorDialog 类的使用:

	QColor getColor
	(
		const QColor& initial=Qt::white,
		QWidget* parent=0
	);

  第 1 个参数指定了选中的颜色,默认为白色。通过 QColor::isValid() 可以判断用户选择的颜色是否有效;若用户单击“取消”(cancel)按钮,则 QColor::isValid() 返回 false。
  第 2 个参数定义了标准颜色对话框的父窗口。

七、设置字符格式

  当光标所在处的字符格式发生变化时调用此槽函数,函数根据新的字符格式将工具栏上各个格式控件的显示更新。

	void ImgProcessor::showCurrentFormatChanged(const QTextCharFormat &fmt)
	{
	    fontComboBox->setCurrentIndex(fontComboBox->findText(fmt.fontFamily()));
	    sizeComboBox->setCurrentIndex(sizeComboBox->findText(QString::number(fmt.fontPointSize())));
	    boldBtn->setChecked(fmt.font().bold());
	    italicBtn->setChecked(fmt.fontItalic());
	    underlineBtn->setChecked(fmt.fontUnderline());
	}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值