1.QPlainTextEdit通过QTextDocument对象存储文本数据
QPlainTextEdit本身只负责界面形态的显示
QPlainTextEdit包括QTextDocument和QTextCursor(负责光标)
2.QTextDocument是表示文本以及文本属性的数据类
- 设置文本的属性:排版、字体、标题等
- 获取文本参数:行数、文本宽度、文本信息等
- 实现标准操作:撤销、重做、查找、打印等
3.打印功能的实现步骤
-
连接QAction打印对象的信号到槽函数
-
在槽函数中定义QPrintDialog对象
-
根据用户选择获取QPrinter对象
-
通过QTextDocument对象进行打印
void MainWindow::onFilePrint()
{
QPrintDialog dlg(this);dlg.setWindowTitle("Print"); if( dlg.exec() == QPrintDialog::Accepted ) { //QPrinter()包含打印机名称、纸张大小、分辨率、输出格式 QPrinter* p = dlg.printer(); mainEditor.document() -> print(p); //document()返回编辑器内部的 QTextDocument 对象 }}
4.光标位置的计算
- 文本框对象的内部包含了QTextCursor对象
- 通过position()成员函数获取当前光标的字符位置
- 根据光标的字符位置计算横纵坐标
- 当光标位置发生变化时进行计算
计算行列的算法:
(1)通过换行符来计算行数
(2)通过当前位置-当前行的起始索引获取列数
void MainWindow::onCursorPositionChanged()
{
int pos = mainEditor.textCursor().position();
QString text = mainEditor.toPlainText();
int col = 0; //列
int ln = 0; //行
int flag = 0;
for(int i=0; i<pos; i++)
{
if(text[i] == '\n')
{
ln++;
flag = i;
}
}
flag++;
col = pos - flag;
statusLbl.setText("Ln: " + QString::number(ln+1)+ " Col: " + QString::number(col+1));
}