文本打印和光标定位 42

文本打印和光标定位 42

QPlainTextEdit通过QTextDocument对象存储文本数据
QPlainTextEdit本身只负责界面形态的显示
QTextDocument用于存储数据信息
可能通过光标的字符位置信息计算坐标

QTextDocument是表示文本以及文本属性的数据类
1.设置文本的属性:排版,字体,标题,等
2. 获取文本参数:行数,文本宽度,文本信息,等
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(); // 通过打印对话框获取打印对象

        mainEditor.document()->print(p); // 打开内部的文档对象
    }
}

光标位置的计算

如何计算编辑框中光标的位置

思路:

文本框对象的内部包含了QTextCursor对象
通过position()成员函数获取当前光标的字符位置
根据光标的字符位置计算横纵坐标
当光标位置发生变化时进行计算


void MainWindow::onCursorPositionChanged()
{
    int pos = mainEditor.textCursor().position();
    QString text = mainEditor.toPlainText();
    int col = 0;
    int ln = 0;
    int flag = -1;

    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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值