修改适配非等宽字体的计数器

This commit is contained in:
2026-08-26 16:23:04 +08:00
parent 950d0d0386
commit 190155913a
10 changed files with 267 additions and 70 deletions
+74 -3
View File
@@ -36,6 +36,8 @@
#include <QScroller>
#include <QFontMetrics>
#include <QPainter>
#include "MainWidget.h"
#include "scene/ItemCommon.h"
extern MyInputMethod *myInputMethod;
unsigned char test_flag,open_close;
@@ -647,6 +649,72 @@ void MainWidget::generateCharRamData()
}
void MainWidget::generateCharRamDataV2()
{
if(sysPara->status.variNum == 0)
return;
qDebug()<<"sysPara->status.variNum:"<<sysPara->status.variNum;
int ramAddress = 0;
int i;
for( i = 0; i < sysPara->status.variNum; i++){
vars_t *p_var = &sysPara->status.vars[i];
p_var->bassAddr = -1;
if(p_var->original){ //清除原来的记录
if(p_var->dat){
free(p_var->dat);
}
p_var->original = false;
}
int width;
if(p_var->bassAddr == -1){
width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12;
int height = p_var->height;
QString fontname = Public::getFontFamily(height,p_var->type);
QFont font(fontname);
// 用 0 间距,间距交给FPGA处理
font.setLetterSpacing(QFont::AbsoluteSpacing, 0);
qDebug() << "Generate char, letter space: " << p_var->letterSpace << "font height: " << height;
static constexpr char *NUMBERS = "0123456789";
QImage image = ItemUtils::txtToImage(NUMBERS, font, Qt::black, Qt::transparent);
int imgH = image.height();
int imgW = image.width();
int rowByteNum = imgH/8 + ((imgH%8)?1:0); // 一列占用字节数
unsigned char *dat = (unsigned char *)calloc(imgW, rowByteNum);
for(int k = 0; k < imgH; k++){
for(int j = 0; j < imgW; j ++){
QRgb rgb = image.pixel(j,k);
int abit = ((rgb >> 24)&0xff) > 0x80 ? 1 : 0;
dat[rowByteNum * j + k / 8] |= (abit << (k%8));
}
}
// 填充宽度表
QFontMetrics fm(font);
for(int i = 0; i < 10; ++i) {
p_var->widthTable[i] = fm.horizontalAdvance(NUMBERS[i]);
}
// 填充其他值
p_var->bassAddr = ramAddress;
p_var->datHeight = imgH;
p_var->datWidth = imgW;
p_var->rowByteNum = rowByteNum;
p_var->dat = dat;
p_var->original = true;
p_var->currVal = -1; //相当于初始化
ramAddress += rowByteNum * imgW;
}
}
}
QList<QRect> MainWidget::variableItemsUpdate()
{
if(!pPicScene) {
@@ -1033,7 +1101,7 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
if(!isUpdate) {
sysPara->devOp->writeFpgaPrintPara(1);
sysPara->devOp->writeFpgaVariCtrl();
sysPara->devOp->writeFpgaVariCtrlv2();
}
sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址
@@ -2057,7 +2125,10 @@ void MainWidget::onPreviewScene()
imageToPrintData(image, 0, 0);
// /*--------------------------------------------------------------------------*/
generateCharRamData();
// generateCharRamData();
generateCharRamDataV2();
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);
@@ -2605,4 +2676,4 @@ void MainWidget::UpdateUIVersion(){
QString Mac = QString::number(sysPara->status.machineMac);
LogInfo::setRunStatusText(QString("Mac:%1").arg(Mac));
LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver);
}
}