1042版本发行
This commit is contained in:
+239
-566
@@ -31,6 +31,7 @@
|
||||
#include "scene/PicDateItem.h"
|
||||
#include "scene/PicScheduleShiftItem.h"
|
||||
#include "scene/piccodeitem.h"
|
||||
#include "scene/PicCounterItem.h"
|
||||
#include <QElapsedTimer>
|
||||
#include <QScroller>
|
||||
|
||||
@@ -530,6 +531,8 @@ QList<QRect> MainWidget::variableItemsUpdate()
|
||||
return QList<QRect>();
|
||||
}
|
||||
|
||||
/*
|
||||
旧实现:
|
||||
int totalOfProcessedDots = 0;
|
||||
int totalOfDatetimeNumber = 0;
|
||||
int nbInvaliedDatetimePreview = 0;
|
||||
@@ -537,6 +540,38 @@ QList<QRect> MainWidget::variableItemsUpdate()
|
||||
|
||||
QList<QRect> updateAreas;
|
||||
|
||||
auto items = pPicScene->items();
|
||||
for(auto i : items) {
|
||||
PicTextItem* item = dynamic_cast<PicTextItem*>(i);
|
||||
if(!item)
|
||||
continue;
|
||||
|
||||
...
|
||||
|
||||
auto boundingRect = pPicScene->itemsBoundingRect().toRect();
|
||||
QRect itemRect(item->pos().x() - boundingRect.x(), item->pos().y() - boundingRect.y(), img.width(), img.height());
|
||||
...
|
||||
|
||||
QRect intersectRect = itemRect.intersected(sceneRect);
|
||||
...
|
||||
}
|
||||
*/
|
||||
|
||||
int totalOfProcessedDots = 0;
|
||||
int totalOfDatetimeNumber = 0;
|
||||
int nbInvaliedDatetimePreview = 0;
|
||||
int nbClipDatetimePreview = 0;
|
||||
|
||||
QList<QRect> updateAreas;
|
||||
|
||||
const QRectF contentRect = pPicScene->itemsBoundingRect();
|
||||
if(contentRect.isEmpty())
|
||||
return updateAreas;
|
||||
|
||||
const int maxPicWidth = sysPara->status.flagOfNo67FPGA ? MAX_PRINT_COL_NUM_Normal : MAX_PRINT_COL_NUM_Wide;
|
||||
const int maxPicHeight = MAX_PRINT_ROW_NUM;
|
||||
const QRectF outputRect(0, 0, maxPicWidth, maxPicHeight);
|
||||
|
||||
auto items = pPicScene->items();
|
||||
for(auto i : items) {
|
||||
PicTextItem* item = dynamic_cast<PicTextItem*>(i);
|
||||
@@ -570,8 +605,8 @@ QList<QRect> MainWidget::variableItemsUpdate()
|
||||
auto codeItem = dynamic_cast<PicCodeItem*>(item);
|
||||
if(!codeItem)
|
||||
continue;
|
||||
|
||||
QVector<int> counterValus{QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(),
|
||||
|
||||
QVector<int> counterValus{QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(),
|
||||
QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt()};
|
||||
auto b = codeItem->updateVariants(counterValus);
|
||||
if(!b)
|
||||
@@ -584,34 +619,24 @@ QList<QRect> MainWidget::variableItemsUpdate()
|
||||
continue;
|
||||
}
|
||||
|
||||
auto sceneRect = pPicScene->sceneRect().toRect();
|
||||
auto boundingRect = pPicScene->itemsBoundingRect().toRect();
|
||||
QRect itemRect(item->pos().x() - boundingRect.x(), item->pos().y() - boundingRect.y(), img.width(), img.height());
|
||||
totalOfDatetimeNumber++;
|
||||
|
||||
// 裁剪item位置, 确保item位于场景内
|
||||
// 如果item超出了场景范围,则裁剪img并更新itemRect,只显示场景内的部分
|
||||
QRect intersectRect = itemRect.intersected(sceneRect);
|
||||
|
||||
if(!intersectRect.isEmpty() && intersectRect != itemRect) {
|
||||
// 计算裁剪区域在原图中的偏移
|
||||
int cropX = qMax(0, (int)(intersectRect.left() - itemRect.left()));
|
||||
int cropY = qMax(0, (int)(intersectRect.top() - itemRect.top()));
|
||||
int cropWidth = (int)intersectRect.width();
|
||||
int cropHeight = (int)intersectRect.height();
|
||||
|
||||
// 裁剪图像
|
||||
img = img.copy(cropX, cropY, cropWidth, cropHeight);
|
||||
|
||||
// 更新itemRect为裁剪后的区域
|
||||
itemRect = intersectRect;
|
||||
const QRectF itemSceneRect = item->sceneBoundingRect();
|
||||
const QRectF itemBufferRect = itemSceneRect.translated(-contentRect.topLeft());
|
||||
const QRectF clippedBufferRect = itemBufferRect.intersected(outputRect);
|
||||
if(clippedBufferRect.isEmpty())
|
||||
continue;
|
||||
|
||||
QRect targetRect = clippedBufferRect.toAlignedRect();
|
||||
totalOfDatetimeNumber++;
|
||||
|
||||
if(targetRect != itemBufferRect.toAlignedRect()) {
|
||||
const int cropX = qMax(0, targetRect.left() - itemBufferRect.toAlignedRect().left());
|
||||
const int cropY = qMax(0, targetRect.top() - itemBufferRect.toAlignedRect().top());
|
||||
img = img.copy(cropX, cropY, targetRect.width(), targetRect.height());
|
||||
++nbClipDatetimePreview;
|
||||
}
|
||||
|
||||
totalOfProcessedDots += imageToPrintData(img, (int)itemRect.left(), (int)itemRect.top());
|
||||
|
||||
updateAreas.append(itemRect);
|
||||
totalOfProcessedDots += imageToPrintData(img, targetRect.left(), targetRect.top());
|
||||
updateAreas.append(targetRect);
|
||||
}
|
||||
|
||||
if(updateAreas.isEmpty())
|
||||
@@ -667,12 +692,15 @@ int MainWidget::imageToPrintData(QImage &image, int startX, int startY)
|
||||
for(int k = 0; k < height; k++)
|
||||
{
|
||||
QRgb rgb = image.pixel(j, k);
|
||||
if(((rgb >> 24) & 0xff) > 0x80)
|
||||
{
|
||||
c |= (1 << (hStart % 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rgb & 0x80000000) { // 判断 alpha
|
||||
// 灰度计算:Y = 0.299*R + 0.587*G + 0.114*B
|
||||
int y = int((((rgb & 0xff) * 299 + ((rgb >> 8) & 0xff) * 587 + ((rgb >> 16) & 0xff) * 114)) / 1000.0f);
|
||||
if (y < 125) {
|
||||
c |= (1 << (hStart % 8));
|
||||
} else {
|
||||
c &= ~(1 << (hStart % 8));
|
||||
}
|
||||
} else {
|
||||
c &= ~(1 << (hStart % 8));
|
||||
}
|
||||
|
||||
@@ -795,6 +823,7 @@ void MainWidget::on_m_StartBtn_clicked()
|
||||
sysPara->saveParaToFile();
|
||||
}
|
||||
|
||||
// onPreviewScene 没有必要再次调用,评估后删除 byons@2026年7月28日
|
||||
if(sysPara->para.EditMode == SCENE)
|
||||
onPreviewScene();
|
||||
|
||||
@@ -899,19 +928,16 @@ void MainWidget::on_m_StopBtn_clicked()
|
||||
}
|
||||
|
||||
unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0};
|
||||
void MainWidget::SendPrintDataToFpga(unsigned char alterMode, int startCol, int size)
|
||||
void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
|
||||
{
|
||||
if(!sysPara) return ;
|
||||
// fileChange=false;
|
||||
|
||||
Q_UNUSED(alterMode);
|
||||
Q_UNUSED(alterEnable);
|
||||
|
||||
// 看清楚,最后取反,也就是说,如果不是局部更新,则写入打印设置和变量控制
|
||||
if(!(startCol >= 0 && size > 0)) {
|
||||
if(!isUpdate) {
|
||||
sysPara->devOp->writeFpgaPrintPara(1);
|
||||
sysPara->devOp->writeFpgaVariCtrl();
|
||||
startCol = 0;
|
||||
size = sysPara->status.currPrintCol;
|
||||
}
|
||||
|
||||
sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址
|
||||
@@ -930,14 +956,11 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterMode, int startCol, int
|
||||
dat =sysPara->status.printDat;
|
||||
sizeofdat = sizeof(sysPara->status.printDat);
|
||||
}
|
||||
if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000)
|
||||
sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM);
|
||||
else
|
||||
sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM);
|
||||
|
||||
dat = dat + startCol * MAX_PRINT_ROW_BYTE_NUM;
|
||||
size = size * MAX_PRINT_ROW_BYTE_NUM;
|
||||
|
||||
if(size <= 20000)
|
||||
sysPara->devOp->fpgaWr(sizeof(blankDat1), dat, size);
|
||||
else
|
||||
sysPara->devOp->fpgaWrD2(sizeof(blankDat1), dat, size);
|
||||
|
||||
static QElapsedTimer bnsTimer;
|
||||
static uint64_t nbRestartCount = 0;
|
||||
@@ -1822,8 +1845,30 @@ int MainWidget::getMaxSpeedCalcPara(){
|
||||
return pulseNum;
|
||||
}
|
||||
|
||||
|
||||
QRect clipBottom(const QImage& img, const QRect& region)
|
||||
{
|
||||
for(int y = region.bottom() - 1; y >= region.top(); --y) {
|
||||
auto line = img.scanLine(y);
|
||||
for(int x = region.left(); x < region.right(); ++x) {
|
||||
auto rgb = *((const uint32_t*)(x * 4 + line));
|
||||
int y = int((((rgb & 0xff) * 299 + ((rgb >> 8) & 0xff) * 587 + ((rgb >> 16) & 0xff) * 114)) / 1000.0f);
|
||||
if((rgb & 0x80000000) && y < 125) {
|
||||
return QRect(QPoint(region.topLeft()), QPoint(region.right(), y + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QRect(region.topLeft(), QSize(region.width(), 0));
|
||||
}
|
||||
|
||||
void MainWidget::onPreviewScene()
|
||||
{
|
||||
if(!sysPara){
|
||||
qCritical() << "SysPara is empty!";
|
||||
return;
|
||||
}
|
||||
|
||||
sysPara->para.EditMode = SCENE;
|
||||
|
||||
if(!pPicScene) {
|
||||
@@ -1831,547 +1876,176 @@ void MainWidget::onPreviewScene()
|
||||
}
|
||||
|
||||
pPicScene->clearSelection();
|
||||
pPicScene->update();
|
||||
|
||||
QRect sceneRect = pPicScene->itemsBoundingRect().toRect();
|
||||
QSize size = sceneRect.size();
|
||||
bool MaxCol4000;
|
||||
if(sysPara->status.flagOfNo67FPGA)
|
||||
MaxCol4000 = true;
|
||||
else
|
||||
MaxCol4000 = false;
|
||||
|
||||
unsigned char *dat;
|
||||
if(MaxCol4000){
|
||||
dat = sysPara->status.printDat_Normal;
|
||||
memset(dat,0,sizeof(sysPara->status.printDat_Normal));
|
||||
}else{
|
||||
dat = sysPara->status.printDat;
|
||||
memset(dat,0,sizeof(sysPara->status.printDat));
|
||||
}
|
||||
|
||||
const QRectF contentRect = pPicScene->itemsBoundingRect();
|
||||
const QRect sceneRect = contentRect.toAlignedRect();
|
||||
qDebug() << "sceneRect: " << sceneRect;
|
||||
|
||||
// 限定最大高度和宽度
|
||||
int coldot = qMin(sceneRect.width(), MaxCol4000 ? MAX_PRINT_COL_NUM_Normal : MAX_PRINT_COL_NUM_Wide);
|
||||
int maxPicHeight = qMin(sceneRect.height(), int(sysPara->para.canvasHeight));
|
||||
QSize size(coldot,maxPicHeight);
|
||||
|
||||
if(size.isEmpty()) {
|
||||
//场景为空时,渲染空场景并刷新界面
|
||||
handleEmptySize();
|
||||
return;
|
||||
}
|
||||
QImage image(size,QImage::Format_ARGB32);
|
||||
|
||||
QImage image(size, QImage::Format_ARGB32);
|
||||
image.fill(0x00ffffff);//填充白色
|
||||
//image.save("./printScene.jpg");//图片
|
||||
|
||||
QPainter painter(&image);
|
||||
pPicScene->render(&painter,QRectF(), sceneRect);
|
||||
|
||||
int coldot=0;
|
||||
if(sysPara){
|
||||
bool MaxCol4000;
|
||||
if(sysPara->status.flagOfNo67FPGA)
|
||||
MaxCol4000 = true;
|
||||
else
|
||||
MaxCol4000 = false;
|
||||
previewFlag=1;
|
||||
sysPara->status.currPrintRow = 0;
|
||||
sysPara->status.variNum = 0;
|
||||
sysPara->status.QRvariNum = 0;
|
||||
unsigned char *dat;
|
||||
if(MaxCol4000){
|
||||
dat =sysPara->status.printDat_Normal;
|
||||
memset(dat,0,sizeof(sysPara->status.printDat_Normal));
|
||||
}else{
|
||||
dat =sysPara->status.printDat;
|
||||
memset(dat,0,sizeof(sysPara->status.printDat));
|
||||
}
|
||||
//qDebug()<<"Preview:";
|
||||
int firstRow = 0;
|
||||
|
||||
{
|
||||
sysPara->status.addSpace = sysPara->para.checkSpace;
|
||||
int myvariNum=0;
|
||||
int expiryVarNum = 0;
|
||||
|
||||
coldot = sceneRect.width();
|
||||
if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||||
coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||||
int maxPicHeight = MAX_PRINT_ROW_NUM + 12;
|
||||
QSize size(coldot,maxPicHeight);
|
||||
sysPara->status.variNum = 0;
|
||||
sysPara->status.QRvariNum = 0;
|
||||
sysPara->status.addSpace = sysPara->para.checkSpace; // 空列已经弃用 __attribute__((deprecated))
|
||||
sysPara->status.currPrintRow = 0;
|
||||
sysPara->status.currPrintCol = coldot;
|
||||
sysPara->status.ExpiryVarNum = 0;
|
||||
sysPara->print.ExpiryVar.startColPos = 0;
|
||||
sysPara->print.ExpiryVar.endRowPos = 0;
|
||||
sysPara->print.ExpiryVar.letterSpace =0;
|
||||
sysPara->print.CurDateVar.startColPos = 0;
|
||||
sysPara->print.CurDateVar.endRowPos = 0;
|
||||
sysPara->print.CurDateVar.letterSpace = 0;
|
||||
sysPara->status.CurrDateVariNum = 0;
|
||||
|
||||
sysPara->status.currPrintRow =0;
|
||||
sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace
|
||||
qDebug() << "Loading scene items: \r\n\r\n\r\n";
|
||||
|
||||
QImage image(size,QImage::Format_ARGB32);
|
||||
image.fill(0x00ffffff);//填充白色
|
||||
QPainter painter(&image);
|
||||
QRectF validRectF(sceneRect.x(),sceneRect.y(),coldot,maxPicHeight);
|
||||
pPicScene->render(&painter,QRectF(),validRectF);
|
||||
int firstRow = 0;
|
||||
int lastRow = firstRow + MAX_PRINT_ROW_NUM;
|
||||
int TempVarNum=0;
|
||||
int varLastRow=0;
|
||||
lastRow = (lastRow>maxPicHeight)?maxPicHeight:lastRow;
|
||||
QList<QGraphicsItem *> items = pPicScene->items();
|
||||
foreach (QGraphicsItem *item, items) {
|
||||
|
||||
// 接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行
|
||||
for(int j = 0; j < lastRow - firstRow; j++){ // Y
|
||||
for(int i = 0; i < coldot; i++){ //
|
||||
QRgb rgb = image.pixel(i,j + firstRow);
|
||||
if(rgb&0x80000000){ //判断alpha
|
||||
if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色
|
||||
|
||||
bool foundvar=0;
|
||||
if(j>0){
|
||||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||||
if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;}
|
||||
//QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0;
|
||||
}
|
||||
if(foundvar){
|
||||
if(sysPara->status.variNum < MAX_VARI_NUM){
|
||||
sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0);
|
||||
sysPara->status.vars[sysPara->status.variNum].endRowPos = j;
|
||||
//if(varLastRow<j+1) varLastRow=j+1;
|
||||
//sysPara->status.variNum ++;TempVarNum++;
|
||||
//i+=5;//scene 每一行可能都包含变量
|
||||
//qDebug()<<"VARr:"<<TempVarNum<<i<<j;
|
||||
}
|
||||
else TempVarNum++;
|
||||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||||
}
|
||||
}
|
||||
|
||||
else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){
|
||||
// 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR)
|
||||
//qDebug()<<"FLAG:"<<i<<j+1<<QString().sprintf("%08X", rgb);
|
||||
if(sysPara->status.QRvariNum>=4)continue;
|
||||
if((rgb & 0x00ffff0) == 0x00ff10) { //MDT
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.QRvariNum++;
|
||||
}
|
||||
else if((rgb & 0x00ffff0) == 0x00ff20) { //QR
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.QRvariNum++;
|
||||
}
|
||||
else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||||
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||||
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||||
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.QRvariNum++;
|
||||
|
||||
}
|
||||
if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4;
|
||||
|
||||
}
|
||||
else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE)
|
||||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||||
bool foundExVar=0;
|
||||
if(j>0){
|
||||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||||
if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;}
|
||||
}
|
||||
if(foundExVar)
|
||||
{
|
||||
if(sysPara->status.ExpiryVarNum <2)
|
||||
{
|
||||
sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0);
|
||||
sysPara->print.ExpiryVar.endRowPos = j;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.ExpiryVarNum ++;
|
||||
i+=5;
|
||||
}
|
||||
//else TempVarNum++;
|
||||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||||
}
|
||||
}
|
||||
else if((rgb & 0xfffff0)==0xff0cf0)
|
||||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||||
bool foundExVar=0;
|
||||
if(j>0){
|
||||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||||
if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;}
|
||||
}
|
||||
if(foundExVar)
|
||||
{
|
||||
if(sysPara->status.ExpiryVarNum <2)
|
||||
{
|
||||
sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0);
|
||||
sysPara->print.CurDateVar.endRowPos = j;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.CurrDateVariNum ++;
|
||||
i+=5;
|
||||
}
|
||||
//else TempVarNum++;
|
||||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||||
}
|
||||
}
|
||||
else if((rgb & 0xffffff)==0xff00ff)
|
||||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||||
{
|
||||
if(sysPara->status.classVariNum <3) {
|
||||
EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ;
|
||||
currCLass->day = QDateTime::currentDateTime().date().day();
|
||||
currCLass->startColPos = i+(sysPara->status.addSpace?i:0);
|
||||
currCLass->endRowPos = j;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.classVariNum ++;
|
||||
i+=5;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量
|
||||
int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000;
|
||||
if(y < 125 ){
|
||||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点
|
||||
if((j+1) > sysPara->status.currPrintRow) {
|
||||
sysPara->status.currPrintRow = j+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}/*判断alpha end*/
|
||||
}
|
||||
}
|
||||
|
||||
if(TempVarNum>MAX_VARI_NUM){
|
||||
setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!"));
|
||||
strTitle= tr("变量数大于8个,某些变量将不起作用!!!");
|
||||
strTitle.append("\r\n");
|
||||
strTitle.append(tr("请减少信息中的变量(或计数器)数量."));
|
||||
QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok);
|
||||
}
|
||||
|
||||
sysPara->status.variNum = 0;
|
||||
sysPara->status.ExpiryVarNum = 0;
|
||||
sysPara->print.ExpiryVar.startColPos = 0;
|
||||
sysPara->print.ExpiryVar.endRowPos = 0;
|
||||
sysPara->print.ExpiryVar.letterSpace =0;
|
||||
sysPara->print.CurDateVar.startColPos = 0;
|
||||
sysPara->print.CurDateVar.endRowPos = 0;
|
||||
sysPara->print.CurDateVar.letterSpace = 0;
|
||||
sysPara->status.CurrDateVariNum = 0;
|
||||
sysPara->status.QRvariNum=0;//lch add
|
||||
int myvariNum=0;
|
||||
int expiryVarNum = 0;
|
||||
|
||||
QList<QGraphicsItem *> items = pPicScene->items();
|
||||
foreach (QGraphicsItem *item, items) {
|
||||
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(item);
|
||||
bool ok;
|
||||
int textvariNum=0;
|
||||
|
||||
int textColdot=0;
|
||||
textColdot = picText->boundingRect().width();
|
||||
if(textColdot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||||
textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||||
int maxTextHeight = MAX_PRINT_ROW_NUM + 12;
|
||||
QSize textSize(textColdot, maxTextHeight);
|
||||
QImage textImage(textSize,QImage::Format_ARGB32);
|
||||
textImage.fill(0x00ffffff);//填充白色
|
||||
//image.fill(0x00f0f000);//填充白色
|
||||
QPainter textPainter(&textImage);
|
||||
//textImage.save("./textImage.jpg");
|
||||
|
||||
//QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,maxTextHeight);
|
||||
QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height());
|
||||
pPicScene->render(&textPainter,QRectF(),validtextRectF);
|
||||
//qDebug()<<"validtextRectF:"<<validtextRectF;
|
||||
//textImage.save("./textImage.bmp");
|
||||
int textFirstRow = 0;
|
||||
//qDebug()<<"textFirstRow:"<<textFirstRow;
|
||||
int textLastRow = textFirstRow + MAX_PRINT_ROW_NUM;
|
||||
int textItemPosX;
|
||||
int textItemPosY;
|
||||
textItemPosX = picText->pos().x() - sceneRect.x();
|
||||
textItemPosY = picText->pos().y() - sceneRect.y();
|
||||
|
||||
//接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行
|
||||
for(int j = 0; j < textLastRow - textFirstRow; j++){ // Y
|
||||
for(int i = 0; i < textColdot; i++){ //
|
||||
QRgb rgb = textImage.pixel(i,j + textFirstRow);
|
||||
if((rgb&0x80000000)){ //判断alpha
|
||||
if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色
|
||||
|
||||
bool textfoundvar = 0;
|
||||
if(j>0){
|
||||
QRgb r_rgb = textImage.pixel(i,j + textFirstRow+1);
|
||||
if((r_rgb & 0xf0f0ff) != 0xf0f000 )
|
||||
{
|
||||
textfoundvar =1;
|
||||
}
|
||||
|
||||
}
|
||||
if(textfoundvar){
|
||||
if(sysPara->status.variNum < MAX_VARI_NUM){
|
||||
sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||||
sysPara->status.vars[sysPara->status.variNum].endRowPos = j+textItemPosY;
|
||||
//qDebug()<<"sysPara->status.variNum:"<<sysPara->status.variNum;
|
||||
//qDebug()<<"startColPos:"<<sysPara->status.vars[sysPara->status.variNum].startColPos;
|
||||
//qDebug()<<"endRowPos:"<<sysPara->status.vars[sysPara->status.variNum].endRowPos;
|
||||
if(varLastRow<j+1)
|
||||
varLastRow=j+1;
|
||||
sysPara->status.variNum ++;
|
||||
textvariNum++;
|
||||
i+=5;//scene 每一行可能都包含变量
|
||||
//qDebug()<<"VARr:"<<TempVarNum<<i<<j;
|
||||
//gItem = pPicScene->itemAt(i,j+firstRow);
|
||||
//picText_var[i]= (PicTextItem*) gItem;
|
||||
//picText_var_hash.insert(picText_var[i],i);
|
||||
}
|
||||
else
|
||||
{
|
||||
textvariNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){
|
||||
// 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR)
|
||||
//qDebug()<<"FLAG:"<<i<<j+1<<QString().sprintf("%08X", rgb);
|
||||
if(sysPara->status.QRvariNum>=4)continue;
|
||||
if((rgb & 0x00ffff0) == 0x00ff10) { //MDT
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.QRvariNum++;
|
||||
}
|
||||
else if((rgb & 0x00ffff0) == 0x00ff20) { //QR
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.QRvariNum++;
|
||||
}
|
||||
else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||||
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||||
|
||||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY;
|
||||
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
sysPara->status.QRvariNum++;
|
||||
|
||||
}
|
||||
if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4;
|
||||
|
||||
}
|
||||
//else if((rgb & 0xfffff0)==0xff00f0)
|
||||
else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE)
|
||||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||||
//qDebug()<<"found EXPIRY_VARI_RECONISE";
|
||||
bool foundExVar=0;
|
||||
if(j>0){
|
||||
QRgb r_rgb = textImage.pixel(i,j + firstRow+1);
|
||||
if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;}
|
||||
}
|
||||
if(foundExVar)
|
||||
{
|
||||
//if(sysPara->status.ExpiryVarNum <2)
|
||||
{
|
||||
//if(sysPara->print.ExpiryVar.endRowPos==0)
|
||||
if(sysPara->status.ExpiryVarNum == 0)
|
||||
{
|
||||
sysPara->status.ExpiryVarNum ++;
|
||||
}
|
||||
sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||||
sysPara->print.ExpiryVar.endRowPos = j+textItemPosY;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
|
||||
i+=10;
|
||||
//qDebug()<<"ExpiryVar ixj:"<<i<<"x"<<j + firstRow;
|
||||
//qDebug()<<"qqqq textItemPosY:"<<textItemPosY;
|
||||
//qDebug()<<"qqqq sysPara->print.ExpiryVar.endRowPos:"<<sysPara->print.ExpiryVar.endRowPos;
|
||||
}
|
||||
//else TempVarNum++;
|
||||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||||
}
|
||||
}
|
||||
else if((rgb & 0xfffff0)==0xff0cf0)
|
||||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||||
|
||||
bool foundExVar=0;
|
||||
if(j>0){
|
||||
QRgb r_rgb = textImage.pixel(i,j + firstRow+1);
|
||||
if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;}
|
||||
}
|
||||
if(foundExVar)
|
||||
{
|
||||
//qDebug()<<"found CurDateVar";
|
||||
//if(sysPara->status.ExpiryVarNum <2)
|
||||
{
|
||||
//if(sysPara->print.CurDateVar.endRowPos==0)
|
||||
if(sysPara->status.CurrDateVariNum == 0)
|
||||
{
|
||||
sysPara->status.CurrDateVariNum ++;
|
||||
//setRunStatus(QString("CurrDateVariNum(%1)").arg(sysPara->status.CurrDateVariNum));
|
||||
}
|
||||
sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||||
sysPara->print.CurDateVar.endRowPos = j + textItemPosY;
|
||||
//qDebug()<<"CurDateVar ixj:"<<i<<"x"<<j + firstRow;
|
||||
//qDebug()<<"sysPara->print.CurDateVar.endRowPos:"<<sysPara->print.CurDateVar.endRowPos;
|
||||
if(varLastRow<j+1) varLastRow=j+1;
|
||||
|
||||
i+=10;
|
||||
//j++;
|
||||
}
|
||||
//else TempVarNum++;
|
||||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||||
}
|
||||
}
|
||||
|
||||
if(j > sysPara->status.currPrintRow) {
|
||||
sysPara->status.currPrintRow = j+textItemPosY;
|
||||
}
|
||||
}/*判断alpha end*/
|
||||
}
|
||||
}
|
||||
//qDebug()<<"ExpiryVarNum:"<<sysPara->status.ExpiryVarNum;
|
||||
//===================一般变量=====================
|
||||
//myvariNum = 0;
|
||||
QString textVariPattern = "<img src=\":/(\\d*)/(\\d*)/../image/digitalWidth(\\d*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||||
QRegExp textrx(textVariPattern);
|
||||
QString textHtml = picText->toHtml();
|
||||
int from = 0;
|
||||
//int myvariNum=0;
|
||||
while(from < textHtml.size() && from != -1){
|
||||
from = textHtml.indexOf(textrx,from);
|
||||
|
||||
if(from != -1){//找到匹配的
|
||||
//qDebug()<<"found variable";
|
||||
from ++;
|
||||
//if(myvariNum < textvariNum)
|
||||
if(myvariNum < sysPara->status.variNum)
|
||||
{
|
||||
sysPara->status.vars[myvariNum].digitalNum = textrx.cap(3).toInt(&ok);//第二个匹配,数字到个数
|
||||
sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75;
|
||||
if(sysPara->status.vars[myvariNum].bold)
|
||||
sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100;
|
||||
|
||||
sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配
|
||||
|
||||
sysPara->status.vars[myvariNum].width = textrx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1);
|
||||
sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok);
|
||||
//qDebug()<<"myvariNum endRowPos:"<<sysPara->status.vars[myvariNum].endRowPos;
|
||||
//qDebug()<<"myvariNum height:"<<sysPara->status.vars[myvariNum].height;
|
||||
sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1;
|
||||
//sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height;
|
||||
//qDebug()<<"start row:"<<sysPara->status.vars[myvariNum].startRowPos;
|
||||
if(sysPara->status.vars[myvariNum].startRowPos<0)
|
||||
sysPara->status.vars[myvariNum].startRowPos=0;
|
||||
|
||||
int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos;
|
||||
int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ;
|
||||
if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||||
item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||||
int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos;
|
||||
int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ;
|
||||
if(item_y_start_pos < 0)
|
||||
item_y_start_pos = 0;
|
||||
for(int i = item_x_start_pos; i < item_x_end_pos; i++){
|
||||
for(int j = item_y_start_pos; j < item_y_end_pos; j++){
|
||||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉
|
||||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8));
|
||||
}
|
||||
}
|
||||
sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok)-1;
|
||||
if(sysPara->status.vars[myvariNum].height>16 ){
|
||||
if(sysPara->status.vars[myvariNum].height==24)
|
||||
;
|
||||
else {
|
||||
if(sysPara->status.vars[myvariNum].startRowPos)
|
||||
{
|
||||
sysPara->status.vars[myvariNum].endRowPos--;
|
||||
sysPara->status.vars[myvariNum].startRowPos--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(sysPara->status.vars[myvariNum].type == RANDOMNUM)
|
||||
{
|
||||
//qDebug()<<"RAND:"<<sysPara->status.vars[myvariNum].type<< sysPara->status.vars[myvariNum].digitalNum;
|
||||
sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum;
|
||||
}
|
||||
int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[myvariNum].height);
|
||||
|
||||
//qDebug()<<"MainWindows"<<sysPara->status.vars[myvariNum].height<<pixelSize;
|
||||
|
||||
sysPara->status.vars[myvariNum].letterSpace = 0;
|
||||
if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace
|
||||
QFont font;
|
||||
//font.setFamily(Public::getFontFamily(pixelSize));
|
||||
font.setFamily(Public::getFontFamily(pixelSize,sysPara->status.vars[myvariNum].type )); // 20160812
|
||||
//pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0));
|
||||
font.setPixelSize(pixelSize);
|
||||
font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal);
|
||||
//font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace);
|
||||
QFontMetrics fontMetrics(font);
|
||||
int charWidth = (fontMetrics.width("0123456789"))/10 ;
|
||||
// sysPara->status.vars[myvariNum].letterSpace = sysPara->para.textEditCharSpace;
|
||||
sysPara->status.vars[myvariNum].letterSpace = picText->letterSpace();
|
||||
//sysPara->status.vars[myvariNum].letterSpace =
|
||||
//sysPara->status.vars[myvariNum].width/sysPara->status.vars[myvariNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth;
|
||||
}
|
||||
myvariNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
//==========================一般变量结束=======================
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
generateCharRamData();
|
||||
if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1;
|
||||
bool found=0;
|
||||
|
||||
lastRow = sysPara->status.currPrintRow;
|
||||
//qDebug()<<"lastRow:"<<lastRow;
|
||||
for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置
|
||||
for(int i = 0; i < coldot; i++){
|
||||
if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){
|
||||
lastRow = j+1;
|
||||
found=1;//qDebug()<<"fOUND:"<<i<<j<<dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8]<<sysPara->status.currPrintRow;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(found)
|
||||
break;
|
||||
}
|
||||
if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1;
|
||||
if(lastRow<varLastRow)lastRow= varLastRow-1;//在场景模式下,变量的最低一行并不一定是打印的最后一行
|
||||
|
||||
if(lastRow<1) lastRow =1;
|
||||
sysPara->status.currPrintRow =lastRow;
|
||||
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(item);
|
||||
if(!picText)
|
||||
continue;
|
||||
|
||||
qDebug() << "Item propertices: ";
|
||||
qDebug() << picText->pos();
|
||||
qDebug() << picText->boundingRect();
|
||||
QXmlStreamAttributes attrs;
|
||||
picText->saveAttrs(attrs);
|
||||
for(auto attr : attrs) {
|
||||
qDebug() << attr.name() << ": " << attr.value();
|
||||
}
|
||||
|
||||
if(sysPara->status.QRvariNum) {
|
||||
// onUpdateDispQRCode(1);
|
||||
const QRectF itemSceneRect = item->sceneBoundingRect();
|
||||
const QRectF clippedSceneRect = itemSceneRect.intersected(contentRect);
|
||||
if(clippedSceneRect.isEmpty())
|
||||
continue;
|
||||
|
||||
const QRect itemRect = clippedSceneRect.translated(-contentRect.topLeft()).toAlignedRect();
|
||||
const QRectF sourceRect = clippedSceneRect;
|
||||
|
||||
if(picText && picText->sourceType() == SourceType::COUNTER) {
|
||||
PicCounterItem* counterItem = qgraphicsitem_cast<PicCounterItem*>(picText);
|
||||
if(!counterItem)
|
||||
continue;
|
||||
|
||||
if(sysPara->status.variNum >= 8)
|
||||
continue;
|
||||
|
||||
int varI = sysPara->status.variNum;
|
||||
auto& varPara = sysPara->status.vars[varI];
|
||||
varPara.type = int(counterItem->counterType());
|
||||
varPara.digitalNum = counterItem->digitalNum();
|
||||
varPara.width = itemRect.width();
|
||||
varPara.height = itemRect.height();
|
||||
varPara.startColPos = itemRect.left();
|
||||
varPara.endRowPos = itemRect.bottom() + 1;
|
||||
varPara.startRowPos = itemRect.top();
|
||||
varPara.currVal = 0;
|
||||
varPara.bold = 0;
|
||||
varPara.letterSpace = counterItem->letterSpace();
|
||||
|
||||
++sysPara->status.variNum;
|
||||
|
||||
// // 将变量序号、类型、数字个数、大小位置打印到日志
|
||||
// LogInfo::setRunStatusText("Variable " + QString::number(varI) + ": type=" + QString::number(varPara.type) +
|
||||
// "\n digitalNum=" + QString::number(varPara.digitalNum) +
|
||||
// "\n width=" + QString::number(varPara.width) +
|
||||
// "\n height=" + QString::number(varPara.height) +
|
||||
// "\n startColPos=" + QString::number(varPara.startColPos) +
|
||||
// "\n endRowPos=" + QString::number(varPara.endRowPos) +
|
||||
// "\n startRowPos=" + QString::number(varPara.startRowPos) +
|
||||
// "\n letterSpace=" + QString::number(varPara.letterSpace));
|
||||
}
|
||||
int wmax = sysPara->status.currPrintRow;
|
||||
sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2;
|
||||
if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0;
|
||||
else {
|
||||
if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1;
|
||||
wmax = sysPara->status.currAlterPrintRow;
|
||||
pPicScene->render(&painter, itemRect, sourceRect);
|
||||
}
|
||||
/*-------------------------------切换到显示窗口-----------------------------------*/
|
||||
|
||||
qDebug() << "currPrintCol: " << sysPara->status.currPrintCol;
|
||||
LogInfo::setRunStatusText("currPrintCol: " + QString::number(sysPara->status.currPrintCol));
|
||||
LogInfo::setRunStatusText("currPrintRow: " + QString::number(sysPara->status.currPrintRow));
|
||||
LogInfo::setRunStatusText(QString("Items bounding rect: {%1, %2}").arg(sceneRect.width()).arg(sceneRect.height()));
|
||||
|
||||
// sysPara->status.currPrintRow = sceneRect.height();
|
||||
sysPara->status.currPrintCol = sceneRect.width();
|
||||
|
||||
auto rows = sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow;
|
||||
rows = std::max(rows, (m_PrintDisplay->parentWidget()->height() / m_PrintDisplay->currScaleRatio()));
|
||||
auto cols = sysPara->status.currPrintCol;
|
||||
cols = std::max(cols, (m_PrintDisplay->parentWidget()->width() / m_PrintDisplay->currScaleRatio()));
|
||||
m_PrintDisplay->setDisplaySize(cols, rows);
|
||||
m_PrintDisplay->update();
|
||||
}
|
||||
previewFlag=0;
|
||||
|
||||
sysPara->status.currPrintRow = sceneRect.height();
|
||||
sysPara->status.currPrintCol = sceneRect.width();
|
||||
|
||||
imageToPrintData(image, 0, 0);
|
||||
|
||||
// /*--------------------------------------------------------------------------*/
|
||||
generateCharRamData();
|
||||
if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1;
|
||||
sysPara->status.currPrintRow = qMin(sysPara->status.currPrintRow, MAX_PRINT_ROW_NUM-1);
|
||||
|
||||
// 计算末行位置
|
||||
bool found = false;
|
||||
int lastRow = sysPara->status.currPrintRow;
|
||||
for(int j = sysPara->status.currPrintRow; j > 2 ; j--){
|
||||
for(int i = 0; i < coldot; i++){
|
||||
if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){
|
||||
lastRow = j+1;
|
||||
found = true;//qDebug()<<"fOUND:"<<i<<j<<dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8]<<sysPara->status.currPrintRow;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(found)
|
||||
break;
|
||||
}
|
||||
|
||||
sysPara->status.currPrintRow = qBound(1, lastRow, MAX_PRINT_ROW_NUM - 1);
|
||||
|
||||
int wmax = sysPara->status.currPrintRow;
|
||||
sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2;
|
||||
if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0;
|
||||
else {
|
||||
if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1;
|
||||
wmax = sysPara->status.currAlterPrintRow;
|
||||
}
|
||||
/*-------------------------------切换到显示窗口-----------------------------------*/
|
||||
|
||||
qDebug() << "currPrintCol: " << sysPara->status.currPrintCol;
|
||||
LogInfo::setRunStatusText("currPrintCol: " + QString::number(sysPara->status.currPrintCol));
|
||||
LogInfo::setRunStatusText("currPrintRow: " + QString::number(sysPara->status.currPrintRow));
|
||||
LogInfo::setRunStatusText(QString("Items bounding rect: {%1, %2}").arg(sceneRect.width()).arg(sceneRect.height()));
|
||||
|
||||
// sysPara->status.currPrintRow = sceneRect.height();
|
||||
sysPara->status.currPrintCol = sceneRect.width();
|
||||
|
||||
auto rows = sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow;
|
||||
rows = std::max(rows, (m_PrintDisplay->parentWidget()->height() / m_PrintDisplay->currScaleRatio()));
|
||||
auto cols = sysPara->status.currPrintCol;
|
||||
cols = std::max(cols, (m_PrintDisplay->parentWidget()->width() / m_PrintDisplay->currScaleRatio()));
|
||||
m_PrintDisplay->setDisplaySize(cols, rows);
|
||||
m_PrintDisplay->update();
|
||||
}
|
||||
|
||||
void MainWidget::handleEmptySize()
|
||||
@@ -2387,7 +2061,6 @@ void MainWidget::handleEmptySize()
|
||||
// pPicScene->render(&emptyPainter, QRectF(), QRectF(0, 0, emptySize.width(), emptySize.height()));
|
||||
|
||||
// 初始化打印参数,避免空场景导致的参数异常
|
||||
previewFlag = 1;
|
||||
sysPara->status.currPrintRow = 0;
|
||||
sysPara->status.currPrintCol = 0; // emptySize.width();
|
||||
sysPara->status.variNum = 0;
|
||||
@@ -2405,7 +2078,6 @@ void MainWidget::handleEmptySize()
|
||||
rows = std::max(rows, (m_PrintDisplay->parentWidget()->height() / m_PrintDisplay->currScaleRatio()));
|
||||
m_PrintDisplay->setDisplaySize(m_PrintDisplay->parentWidget()->width() / m_PrintDisplay->currScaleRatio(), rows);
|
||||
m_PrintDisplay->update();
|
||||
previewFlag = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2873,6 +2545,7 @@ void MainWidget::UpdateUIVersion(){
|
||||
|
||||
QString VernonBach;
|
||||
VernonBach.sprintf("A%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
|
||||
VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+ QString(__TIME__)+"_";
|
||||
|
||||
QString Mac = QString::number(sysPara->status.machineMac);
|
||||
LogInfo::setRunStatusText(QString("Mac:%1").arg(Mac));
|
||||
|
||||
Reference in New Issue
Block a user