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));
}
相关推荐
nice_lcj5202 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河662 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
nice_lcj5206 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐7 小时前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm8 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶8 小时前
慢就是快16-1协程
开发语言·前端·python
Dovis(誓平步青云)9 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄9 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
.痞老板.10 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
奇树谦10 小时前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构