QT繪圖概述和打印機設置注意


QPaintDeviceQPaintEngineQPainter是 Qt 繪制系統的三個核心類。

QPainter用於進行繪制的實際操作,比如畫點、畫圖;

QPaintDevice是那些能夠讓QPainter進行繪制的“東西”(准確的術語叫做,二維空間)的抽象層(其子類有QWidgetQPixmapQPictureQImageQPrinter等);

QPaintEngine提供QPainter使用的用於在不同設備上繪制的統一的接口,QPainter是QPaintEngine的子類,QPaintEngine不能直接使用。

 

要用Qt進行打印等操作,需要了解三層關系:

第一層是QPainter用到的坐標,叫作窗口坐標,設置如qpainter.setWindow(x, y, width, height),設置左上角的坐標為(x,y),向下向右為正,width為向右的最大尺寸,height為向下的最大尺寸;

第二層叫作視口,視口是規定可顯示的區域,從顯示區域的角度看視口和窗口是一樣的,如果視口和窗口的坐標系統不一樣,會導致需要顯示的圖片變形,

比如1:

視口設置如qpainter.setViewport(0,0,300,150);

窗口設置如qpainter.setWindow(0,0,300,300);

結果:畫出來的圖片原本是200*200實際顯示是200*100,因為實際的選手區域是300*150,窗口把視口的300長度進行300等分,把視口的150長度進行300等分。

比如2:

視口設置如qpainter.setViewport(0,0,300,150);

窗口設置如qpainter.setWindow(-150,-150,300,300);

結果:畫出來的圖片原本的位置是(0,0)實際在(150,125)。

總之把窗口坐標變為視口坐標,才是我們看到的位置和大小,默認窗口和視口坐標系統一樣,左上角坐標是(0,0),向下向右為正。

第三層是實際設備可顯示區域,默認視口和設備可顯示區域是重合的,改變視口的大小會導致和設備可顯示區域不重合,比如視口小於設備可顯示區域。

 

 

 

 

下面的代碼是在保證圖片img不變性、不缺少的條件下,重新設置視口的長寬比,但是如果設置后的視口大小小於圖片img的大小,顯示的圖片img會縮小。

QRect rect = painter.viewport();
QSize s = img.size();
s.scale(rect.size(), Qt::KeepAspectRatio);
//根據rect的尺寸改變的是s的尺寸,並且保證s的長寬比
painter.setViewport(rect.x(), rect.y(),
s.width(), s.height());
painter.setWindow(img.rect());

 

下面的代碼是打印機一些常用設置

                //the page's height is greater than its width.
printer.setOrientation(QPrinter::Portrait);
//設置紙張大小
QSize size;
int paperHeight = 567;//600/25.4*24=567
size.setHeight(24);//單位mm 表示色帶的長(對於PT-P700,實際最小打印是24.7) 567
int paperWidth = 425;//600/25.4*18=425
size.setWidth(18);//單位mm 表示色帶的寬(標准規格)
printer.setPaperSize(QSizeF(size),QPrinter::Millimeter);
//設置打印機分辨率
printer.setResolution(600);//設置打印DPI(這個參數和圖片的像素決定尺寸) 600表示1英寸,也就是25.4mm
//設置page和paper的尺寸一樣
printer.setFullPage(true);
//設置邊緣的尺寸為0
printer.setPageMargins(0,0,0,0,QPrinter::Millimeter);

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com