Qt——文本打印与光标定位

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));
}
相关推荐
Chengbei114 分钟前
JsOwl|AI 赋能 JS 敏感信息扫描器,AST + 正则、source‑map 源码还原、登录态爬虫输出交互式 HTML 报告
开发语言·javascript·网络·人工智能·爬虫·网络安全·自动化
David猪大卫6 分钟前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
geovindu9 分钟前
rust: Iterator Pattern
开发语言·后端·设计模式·rust·行为模式·迭代器模
SDWAN_Cheap34 分钟前
深度解析什么是CDN加速:从原理到实践的技术拆解
开发语言·cdn加速
鬼手点金34 分钟前
模型即 Agent:当模型本身成为产品
开发语言·前端·人工智能·python·机器学习
染指11101 小时前
147.Agent-LangGraph归并函数
开发语言·人工智能·python·langchain·agents
Elastic 中国社区官方博客1 小时前
教程:监控 Java 应用
java·开发语言·数据库·elasticsearch·搜索引擎·全文检索
ShineWinsu1 小时前
对于JavaScript:初识JavaScript以及输入输出
java·开发语言·前端·javascript·css·面试·html
小小安于乱1 小时前
linux中java的springboot程序获取IP地址间歇性10秒卡顿问题
java·开发语言
峥嵘life1 小时前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式