文本打印和光标定位 42
QPlainTextEdit通过QTextDocument对象存储文本数据
QPlainTextEdit本身只负责界面形态的显示
QTextDocument用于存储数据信息
可能通过光标的字符位置信息计算坐标
QTextDocument是表示文本以及文本属性的数据类
1.设置文本的属性:排版,字体,标题,等
2. 获取文本参数:行数,文本宽度,文本信息,等
3. 实现标准操作:撤销,重做,查找,打印,等
打印功能的实现步骤
1. 连接QAction打印对象的信号到槽函数
2. 在槽函数中定义QPrintDialog对象
3. 根据用户选择获取QPrinter对象
4. 通过QTextDocument对象进行打印
void MainWindow::onFilePrint()
{
QPrintDialog dlg(this);
dlg.setWindowTitle("Print");
if( dlg.exec() == QPrintDialog::Accepted ) // 用户选择了打印
{
QPrinter* p = dlg.printer(); // 通过打印对话框获取打印对象
mainEditor.document()->print(p); // 打开内部的文档对象
}
}
光标位置的计算
如何计算编辑框中光标的位置
思路:
文本框对象的内部包含了QTextCursor对象
通过position()成员函数获取当前光标的字符位置
根据光标的字符位置计算横纵坐标
当光标位置发生变化时进行计算
void MainWindow::onCursorPositionChanged()
{
int pos = mainEditor.textCursor().position();
QString text = mainEditor.toPlainText();
int col = 0;
int ln = 0;
int flag = -1;
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));
}