首先,公布一个好消息,小豆君的微信公众号“跟小豆君学Qt”已经开通啦,希望大家来一波订阅,多多支持小豆君。
作为回馈,公众号中不仅有Qt分享,小豆君还会更新一些编程技巧,为大家送上满满的干货。
好的,接下来,继续分享Qt知识。
2.8.3 QTextEdit 富文本编辑器
2.8.3.1 富文本编辑器
与普通的纯文本相比,富文本其实就是可以显示图片,链接,表格,对文本进行格式化处理等的编辑器。
有人可能还会拿markdown和富文本相比较,其实markdown就是通过一些标识字符将信息转化成富文本。我在简书中就是用的markdown编辑的。
再次强调,在阅读Qt类时,先看属性是一个非常有效的方法。
2.8.3.2 属性
1 autoFormatting
自动格式化,这里的格式化类似于word文档中的自动格式化。
- AutoNone:不进行任何自动格式化。
- AutoBulletList:自动创建列表。(当用户在当前行最左侧输入一个星号*,就会创建一个列表条目。如果在一个已有的列表后输入回车,则会创建一个新列表。这个功能类似于markdown的语法)。
- AutoAll:打开所有自动格式化。但目前只支持列表的自动格式化。
2 cursorWidth
光标宽度,默认为1个像素
3 lineWrapColumnOrWidth
如果属性wordWrapMode是FixedPixelWidth,那么它表示从文本编辑框的文本像素宽。如果wordWrapMode是FixedColumnWidth,其值表示列号。
4 lineWrapMode
换行模式
- NoWrap 不换行。
- WidgetWidth 到达窗口边缘处换行。默认模式。
- FixedPixelWidth 到达固定的像素值换行。
- FixedColumnWidth 到达固定的列号换行。
5 overwriteMode
true-相当于文本编辑器中的插入模式。
6 plainText
纯文本
如果要获取编辑框的文本,可以调用toPlainText()
7 tabChangesFocus
一般情况下,tab键用来切换控件焦点,但在文本编辑框中经常用tab键作为输入,设置该属性为false,则编辑框接收tab输入。
8 tabStopWidth
设置tab键缩进距离(像素)
9 wordWrapMode
单词换行模式
- NoWrap: 不换行。
- WordWrap: 在边界换行,单词本身并不会被拆分,如果当前行无法显示,则会显示在下一行。
- ManualWrap:同NoWrap不换行。
- WrapAnywhere: 一个单词可以分多行显示。
- WrapAtWordBoundaryOrAnywhere: WordWrap|WrapAnywhere
注意换行模式中,要先以lineWrapMode为标准,再看wordWrapMode。
10 html
QTextEdit还支持使用html标记语言。关于html的语法知识,你可以查看w3school 在线教程进行学习,小豆君就是从那里入门的。
2.8.4 示例
在上一节的InputWidget类中,继续添加槽函数和一个私有函数initTextEditTab()。
在ui界面中插入一个tab页,标签设置为QTextEdit
ui界面:
inputwidget.h
private slots: //QTextEdit void on_spinBox_cursorWidth_valueChanged(int arg1); void on_spinBox_lineWrapColumnOrWidth_valueChanged(int arg1); void on_spinBox_tabStopWidth_valueChanged(int arg1); void on_checkBox_overwriteMode_toggled(bool checked); void on_checkBox_tabChangesFocus_toggled(bool checked); void on_comboBox_lineWrapMode_currentIndexChanged(int index); void on_comboBox_wordWrapMode_currentIndexChanged(int index); private: void initTextEditTab();
inputwidget.cpp
void InputWidget::on_spinBox_cursorWidth_valueChanged(int arg1) { ui->textEdit->setCursorWidth(arg1); } void InputWidget::on_spinBox_lineWrapColumnOrWidth_valueChanged(int arg1) { ui->textEdit->setLineWrapColumnOrWidth(arg1); } void InputWidget::on_spinBox_tabStopWidth_valueChanged(int arg1) { ui->textEdit->setTabStopWidth(arg1); } void InputWidget::on_checkBox_overwriteMode_toggled(bool checked) { ui->textEdit->setOverwriteMode(checked); } void InputWidget::on_checkBox_tabChangesFocus_toggled(bool checked) { ui->textEdit->setTabChangesFocus(checked); } void InputWidget::on_comboBox_lineWrapMode_currentIndexChanged(int index) { ui->textEdit->setLineWrapMode((QTextEdit::LineWrapMode)index); } void InputWidget::on_comboBox_wordWrapMode_currentIndexChanged(int index) { ui->textEdit->setWordWrapMode((QTextOption::WrapMode)index); } void InputWidget::initTextEditTab() { //输入方向-水平 QStringList textList; textList << "NoWrap" <<"WidgetWidth" << "FixedPixelWidth" << "FixedColumnWidth"; ui->comboBox_lineWrapMode->addItems(textList); //输入方向-垂直 textList.clear(); textList << "NoWrap" << "WordWrap" <<"ManualWrap" << "WrapAnywhere" << "WrapAtWordBoundaryOrAnywhere"; ui->comboBox_wordWrapMode->addItems(textList); }
好了,关于QTextEidt的内容今天先讲到这里,下节会继续介绍如何对富文本进行操作。
欢迎关注小豆君的微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。