日前在Linux环境下使用Qt做了一个小项目,其中在打印输出部分要求在页面上填充一个矩形区域,在调试打印过程中,发生了麻烦。我的程序是这样写的:
QPrinter *prt= new QPrinter(QPrinter::PrinterResolution);
QPainter *pnt=new QPainter();
pnt->begin(prt);
...
pnt->setBrush(Qt::Dense7pattern);
pnt->drawRect(x,y,h,w);
...
pnt->end();
每次打印时第一页都正常,但从第二页开始填充就失效,只输出一个白框。
找不到原因,于是换方案,我想用画一条粗线的办法代替短形,于是程序相关部分改成这样:
QPen *p=new QPen();
p->setBrush(Qt::Dense7Pattern);
p->setCapStyle(Qt::FlatCap);
pnt->setPen(*p);
用这个办法打印,换页之后填充不失效,但又出了新问题。
按上面对线端点的设置 Qt::FlatCap ,线应该是一个平端点,但实际输出的效果却是类似于线端点设置为 Qt::SquareCap 时的效果,也就是在线端点向外延长半个线宽的长度。但 Qt::SquareCap 的延长部分是线本身同样的格式,Qt::FlatCap 打印出来的延长部分是黑色的。
使用同样的函数,在屏幕上输出是正常的效果,在打印机上输出就不正常。我在两台打印机上做过测试,一台激光机,一台喷墨机,结果一样。
最后我用设置线颜色的方法的解决了问题:
QPen *p=new QPen();
p->setColor(Qt::yellow);
p->setCapStyle(Qt::FlatCap);
pnt->setPen(*p);
因为最终打印的是黑白页面,只是想在页面上标记出一个区域与其它区域的不同,所以设置填充背景和填充颜色在实际效果上没有本质上的区别。
这会不会是Qt在打印输出使用到 brush 时的bug?
我用的是Everest Linux 0.52,Qt 4.5.1。