简述

QTextEdit类提供了一个控件,用于编辑和显示纯文本和富文本。

QTextEdit是一种高级WYSIWYG(所见即所得)查看器/编辑器,支持使用HTML样式标记的富文本格式。它经过优化,可处理大型文档并快速响应用户输入。如果只需要显示一小段富文本,请使用QLabel。

QTextEdit也可以显示图像,列表和表格。

功能描述

QTextEdit适用于段落和字符。段落是经过格式化的字符串,将其自动换行以适合窗口小部件的宽度。默认情下,阅读纯文本时,一个换行符表示一个段落。一个文档包含零个或多个段落。段落中的单词根据段落的对齐方式对齐。段落之间用强行换行符分隔。段落中的每个字符都有其自己的属性,例如字体和颜色。

如果文本太大而无法在文本编辑的视口中查看,则会出现滚动条。文本编辑可以加载纯文本文件和富文本文件。使用HTML 4标记的子集描述富文本,请参阅“支持的HTML子集”页面以获取更多信息。

Qt中的富文本格式支持旨在提供一种快速,可移植且有效的方式,以便为应用程序添加合理的联机帮助功能,并为富文本编辑器提供基础。如果您发现HTML支持不足以满足您的需求,则可以考虑使用Qt WebKit,它提供了功能齐全的Web浏览器小部件。

默认情况下,QTextEdit上鼠标光标的形状为Qt::IBeamCursor。可以通过viewport()的cursor属性进行更改。

基本使用

下面的例子来自Qt官方案例,源码请到官方查看。

常用功能介绍

  • 加载文件
    QString fileName = QFileDialog::getOpenFileName(this);
	QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return "read failed !!";
    QTextStream textStream(&file);
    textStream.setCodec(codec);
    QString text = textStream.readAll();
    textEdit->setPlainText(text);//加载html用setHtml

QFile类的功能是读取文件,默认情况下,它不会对文件进行任何处理,只负责将文件以二进制的方式读出并存放到一个字节数组中。QTextStream类用来将存储介质中的8位字节数据转换为16位的Unicode字符串。默认情况下,QTextStream假定我们使用系统本地8位编码。可以通过QTextStream::setCodec()来改变解析数据时所采用的编码格式(类unix系统一般采用utf-8编码)。

  • 保存文件
    QFileDialog dialog(this);
    dialog.setWindowModality(Qt::WindowModal);
    dialog.setAcceptMode(QFileDialog::AcceptSave);
    if (dialog.exec() != QDialog::Accepted)
        return false;
    return saveFile(dialog.selectedFiles().first());
  • 常见文本属性设置

效果

源码

    QPushButton  *italicBtn = new QPushButton("斜体");
    italicBtn->setCheckable(true);
    italicBtn->setChecked(false);
    italicBtn->setStyleSheet("QPushButton {background:transparent;}"
                             "QPushButton:checked {background-color:white}");

    QPushButton *boldBtn = new QPushButton("加粗");
    boldBtn->setCheckable(true);
    boldBtn->setChecked(false);
    boldBtn->setStyleSheet("QPushButton {background:transparent;}"
                           "QPushButton:checked {background-color:white}");

    QPushButton *underlineBtn = new QPushButton("下划线");
    underlineBtn->setCheckable(true);
    underlineBtn->setChecked(false);
    underlineBtn->setStyleSheet("QPushButton {background:transparent;}"
                                "QPushButton:checked {background-color:white}");

    QString textString = textFromFile(":/test1.txt", "gbk");
    QTextEdit *textEdit = new QTextEdit;
    textEdit->setPlainText(textString);


    QFontComboBox *fontComboBox = new QFontComboBox;


    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(fontComboBox, 0, 0, 1, 1);
    gridLayout->addWidget(italicBtn, 0, 1, 1, 1);
    gridLayout->addWidget(boldBtn, 0, 2, 1, 1);
    gridLayout->addWidget(underlineBtn, 0, 3, 1, 1);
    gridLayout->addWidget(textEdit, 1, 0, 1, 4);

    connect(fontComboBox, &QFontComboBox::currentFontChanged, [=](QFont font) {
        textEdit->setFontFamily(font.family());
        textEdit->setPlainText(textString);
    });

    connect(italicBtn, &QPushButton::toggled, [=](bool checked) {
        if (checked) {
            textEdit->setFontItalic(true);
            textEdit->setPlainText(textString);
        } else {
            textEdit->setFontItalic(false);
            textEdit->setPlainText(textString);
        }
    });

    connect(boldBtn, &QPushButton::toggled, [=](bool checked){
        if (checked) {
            textEdit->setFontWeight(QFont::Bold);
            textEdit->setPlainText(textString);
        } else {
            textEdit->setFontWeight(QFont::Normal);
            textEdit->setPlainText(textString);
        }
    });

    connect(underlineBtn, &QPushButton::toggled, [=](bool checked){
        if (checked) {
            textEdit->setFontUnderline(true);
            textEdit->setPlainText(textString);
        } else {
            textEdit->setFontUnderline(false);
            textEdit->setPlainText(textString);
        }
    });

    this->setLayout(gridLayout);
    this->resize(500, 500);

警告:所有属性必须在setText之前进行设置。当属性发生变化后必须再次调用setText来对显示文本进行刷新。

总结

QTextEdit提供对文本的阅读及修改功能。通过上面的内容,我们对该类的作用有了一定的直观感受。但是,QTextEdit是一个功能十分庞杂的类,上面仅仅是它的一小部分,用于帮助我们快速地建立起对QTextEdit的直观理解与基本使用方法。更多内容请参考Qt帮助文档。

引用

[1] Qt助手

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐