第四十二课、文本打印与光标定位------------------狄泰软件学院

一、文本编辑器中的打印

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值