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