
Qt开发-文本打印与光标定位
(1)、QPlainTextEdit通过QTextDocument对象存储文本数据。(2)、通过position() 成员函数获取当前光标的字符位置。(1)、文本框对象的内部包含了QTextCursor对象。(2)、获取文本参数:行数、文本宽度、文本信息等。(1)、连接QAction打印对象的信号到槽函数。(2)、通过最后一个'\n'字符的下标计算所在列。(3)、实现标准操作:撤销、重做、查找、打
一、文本编辑器中的打印
1、QPlainTextEdit内部的文档结构
(1)、QPlainTextEdit通过QTextDocument对象存储文本数据
(2)、QPlainTextEdit本身只负责界面形态的显示
(3)、QPlainTextEdit内部有指针指向下面两个类

2、QTextDocument是表示文本以及文本属性的数据类
(1)、设置文本的属性:排版,字体,标题等
(2)、获取文本参数:行数、文本宽度、文本信息等
(3)、实现标准操作:撤销、重做、查找、打印等
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();//将参数设置进打印机
mainEdit.document()->print(p);
}
}
二、光标位置的计算
1、思路
(1)、文本框对象的内部包含了QTextCursor对象
(2)、通过position() 成员函数获取当前光标的字符位置
(3)、根据光标的字符位置计算横轴坐标
(4)、当光标位置发生变化进行计算
2、算法流程描述
(1)、通过'\n'字符的个数计算所在行
(2)、通过最后一个'\n'字符的下标计算所在列

void MainWindow::onCursorPositionChanged()
{
int pos = mainEdit.textCursor().position();
QString text = mainEdit.toPlainText();//获取编辑器中的内容
int ln = 0;
int col = 0;
int flag = -1;
for(int i=0; i<pos; i++)
{
if(text[i] == '\n')
{
ln++;
flag = i;
}
}
flag++;//如光标在第十一行的某个位置,那么一共有十个换行符,flag++就是在第十行最后一个位置(即最后一个光标所在位置)
col = pos - flag;//用第十一行光标所在位置减去前十行的总数就得第十一行的字符个数,即纵坐标
statusLabel.setText("Ln: " + QString::number(ln+1)+ " Col: " + QString::number(col+1));
}
三、小结
(1)、QPlainTextEdit将数据和界面分开设计
(2)、QTextDocument用于存储数据信息
(3)、QTextCursor用于提供光标相关信息
(4)、可以通过光标的字符位置信息计算坐标
更多推荐
所有评论(0)