qsteprint.cpp
来自「porting scintilla to qt」· C++ 代码 · 共 167 行
CPP
167 行
#include <qprinter.h>#include <qstack.h>#include <qpainter.h>#include <QAbstractScrollArea>#include <qpoint.h>#include <ctype.h>#include <stdlib.h>#include <QScrollBar>#include <QMouseEvent>#include "SciLexer.h"#include "qsteprint.h"#include "qsteeditor.h"QStePrint::QStePrint(QSteEditor *editor,QPrinter *qprinter,QWidget *parent):QAbstractScrollArea(parent),m_editor(editor),m_printer(qprinter){ initialize();}QStePrint::~QStePrint(){}void QStePrint::zoomIn(int degree){}void QStePrint::zoomOut(int degree){}void QStePrint::focusInEvent(QFocusEvent *event){}void QStePrint::focusOutEvent(QFocusEvent *event){}bool QStePrint::focusNextPrevChild(bool next){}void QStePrint::keyPressEvent(QKeyEvent *event){}void QStePrint::inputMethodEvent(QInputMethodEvent *event){}void QStePrint::mouseDoubleClickEvent(QMouseEvent *event){}void QStePrint::mouseMoveEvent(QMouseEvent *e){ if (mousePressPos.isNull()) { e->ignore(); return; } horizontalScrollBar()->setValue(scrollBarValuesOnMousePress.x() - e->pos().x() + mousePressPos.x()); verticalScrollBar()->setValue(scrollBarValuesOnMousePress.y() - e->pos().y() + mousePressPos.y()); horizontalScrollBar()->update(); verticalScrollBar()->update(); e->accept();}void QStePrint::mousePressEvent(QMouseEvent *e){ mousePressPos = e->pos(); scrollBarValuesOnMousePress.rx() = horizontalScrollBar()->value(); scrollBarValuesOnMousePress.ry() = verticalScrollBar()->value(); e->accept();}void QStePrint::mouseReleaseEvent(QMouseEvent *e){ mousePressPos = QPoint(); e->accept();}void QStePrint::paintEvent(QPaintEvent *event){ if(m_editor == NULL || m_printer == NULL) return; QPrinter *printer = m_printer; int mag = 0; int wrap = SC_WRAP_WORD; // Setup the printing area from parameter in printer QRect def_area; //int right = printer->paperRect().right() - printer->pageRect().right(); //int bottom = printer->paperRect().bottom() - printer->pageRect().bottom(); int left= printer->paperRect().left() - printer->pageRect().left(); int top= printer->paperRect().top() - printer->pageRect().top(); def_area.setY(10); def_area.setX(20); def_area.setWidth(printer->width() - left * 2); def_area.setHeight(printer->height() - top * 2); // Get the page range. int pgfrom, pgto; pgfrom = printer->fromPage(); pgto = printer->toPage(); // Find the position range. long startpos, endpos; endpos = m_editor->sendMsgToSci(SCI_GETLENGTH); startpos = 0; QPainter painter(viewport()); bool reverse = (printer->pageOrder() == QPrinter::LastPageFirst); bool neednewpage = false; m_editor->sendMsgToSci(SCI_SETPRINTMAGNIFICATION,0); m_editor->sendMsgToSci(SCI_SETPRINTWRAPMODE,wrap); for(int i = 1;i <= printer->numCopies();i++){ QStack<long> pagestarts; int currpage = 1; long pos = startpos; while(pos < endpos){ if(pgto > 0 && pgto < currpage) break; bool render = false; if(pgfrom == 0 || pgfrom <= currpage){ if(reverse){ pagestarts.push(pos); }else{ render = true; if(neednewpage){ if(!printer->newPage()) return; }else{ neednewpage = true; } } } QRect area = def_area;// printer->formatPage(painter,render,area,currpage); pos = m_editor->sendMsgToSci(SCI_FORMATRANGE,render,&painter,area,pos,endpos); currpage++; } if(!reverse) continue; while(!pagestarts.isEmpty()){ --currpage; long epos = pos; pos = pagestarts.pop(); if(neednewpage){ if(!printer->newPage()){ return; } }else{ neednewpage = true; } QRect area = def_area;// printer->formatPage(painter,true,area,currpage); m_editor->sendMsgToSci(SCI_FORMATRANGE,true,&painter,area,pos,epos); } }}void QStePrint::resizeEvent(QResizeEvent *event){}void QStePrint::scrollContentsBy(int dx,int dy){}void QStePrint::initialize(){ verticalScrollBar()->setSingleStep(20); horizontalScrollBar()->setSingleStep(20); viewport()->setBackgroundRole(QPalette::Dark); verticalScrollBar()->setValue(10); horizontalScrollBar()->setValue(10); verticalScrollBar()->setMinimum(10); horizontalScrollBar()->setMinimum(0); verticalScrollBar()->setMaximum(1000); horizontalScrollBar()->setMaximum(10000);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?