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));
}
相关推荐
Marst Code1 小时前
Python 3.9 已停止维护!从 3.9 到 3.14 全版本深度对比,生产环境该选哪个?
开发语言·python
ZJH__GO2 小时前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
万岳科技系统开发2 小时前
智慧医院小程序开发推动医疗服务流程全面线上化
大数据·开发语言·人工智能
一只小灿灿2 小时前
C++ 修饰符全面详解
开发语言·c++
马里马里奥-2 小时前
从零搭建AI Agent工具链的技术文章大纲
开发语言·qt
不做Java程序猿好多年3 小时前
Java中 String、StringBuffer、StringBuilder 的区别详解
开发语言·python
会周易的程序员3 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
笨蛋不要掉眼泪3 小时前
Java虚拟机:常用参数
java·开发语言·python
happy_0x3f4 小时前
前端应用的离线暂停更新策略
开发语言·前端·php
shylyly_4 小时前
C++中的类型转换
开发语言·c++·匿名对象·隐式类型转换·拷贝优化