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));
}
相关推荐
言乐69 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
WWJA王文举16 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha131417 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
qq_4480111618 小时前
C语言中的动态内存分配
c语言·开发语言·php
汉字萌萌哒19 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter19 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
汉字萌萌哒20 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
叠层归一研究院20 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
小雨笙笙20 小时前
C语言:变量三属性——存储类型
c语言·开发语言
果果燕21 小时前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++