Qt之輸入控件(QTextEdit)

簡述

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助手

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章