修复因场景模式修改为绝对坐标引起的打印补全、蜂鸣器报警改为常响、添加相位故障关闭回收槽功能、取消翻转上下颠倒,与莱宾格行为同步、修改场景模式默认字体为7点、取消变量占位图设计

This commit is contained in:
2026-08-28 16:42:19 +08:00
parent 9564bd107e
commit 665c0fd81a
25 changed files with 2396 additions and 2538 deletions
+15 -10
View File
@@ -552,10 +552,12 @@ QImage ItemUtils::txtToImage(const QString &txt, const QFont &font, const QColor
return QImage();
}
QString targetTxt = txt.left(400);
// 用 QFontMetrics 计算给定字体下文本的水平推进宽度和单行高度,
// 这样初始画布刚好能容纳整段文本,避免后续裁剪时出现截断
QFontMetrics fm(font);
int width = fm.horizontalAdvance(txt);
int width = fm.horizontalAdvance(targetTxt);
int height = fm.height();
// 优先使用字体名中后缀标识的字体高度
@@ -568,17 +570,21 @@ QImage ItemUtils::txtToImage(const QString &txt, const QFont &font, const QColor
break;
}
}
if(!numStr.isEmpty()) {
height = numStr.toInt();
if(height < 5 || height > 32)
if (!numStr.isEmpty()) {
int h = numStr.toInt();
if (h >= 5 && h <= 32) {
height = h;
} else {
height = fm.height();
}
}
if (width <= 0 || height <= 0) {
return QImage();
}
QImage img(width, height, QImage::Format_ARGB32);
int letterSpace = (int)(font.letterSpacing());
QImage img(width - letterSpace, height, QImage::Format_ARGB32);
QRgb bgRgb = bgColor.rgba();
img.fill(bgRgb);
@@ -587,11 +593,10 @@ QImage ItemUtils::txtToImage(const QString &txt, const QFont &font, const QColor
painter.begin(&img);
painter.setFont(font);
painter.setPen(fgColor);
painter.drawText(img.rect(), txt);
painter.end();
// 使用基线坐标绘制单行文本,确保 glyph 间距按字体度量精确排列
int baselineY = fm.ascent();
painter.drawText(QPoint(0, baselineY), targetTxt);
painter.end();
return img;
// 按背景色裁剪,使输出图像紧贴文字像素的最小包围盒(详见函数注释)
return clipTxtImage(img, bgRgb);
}
+9 -4
View File
@@ -32,6 +32,11 @@ void PicCounterItem::setSource(QVariant var)
void PicCounterItem::setCounter(COUNTER_TYPE type, int digitalNum)
{
if(type != COUNTER_TYPE_1 && type != COUNTER_TYPE_2) {
qWarning() << "Missing counter type: " << type;
return;
}
// 直接修改字体,生成新的HTML占位图
auto font = this->font();
QString fontname = font.family();
@@ -59,13 +64,13 @@ void PicCounterItem::setCounter(COUNTER_TYPE type, int digitalNum)
width += letterSpace();
m_counterType = type;
m_digitalNum = digitalNum;
m_digitalImg = strToImage(QString("8").repeated(digitalNum));
m_digitalNum = qBound(1, digitalNum, 8);
m_digitalImg = strToImage(QString("8").repeated(m_digitalNum));
applyModify();
qInfo() << "Counter item set to " << type ;
qInfo() << ">\tdigitalNum: " << digitalNum << ", font name: " << fontname << ", pixel size: " << pixelSize;
qInfo() << ">\tletterSpace: " << letterSpace() << "charRom width: " << digitalNum * width << " width: " << width;
qInfo() << ">\tdigitalNum: " << m_digitalNum << ", font name: " << fontname << ", pixel size: " << pixelSize;
qInfo() << ">\tletterSpace: " << letterSpace() << "charRom width: " << m_digitalNum * width << " width: " << width;
}
int PicCounterItem::charWidth()
+1 -1
View File
@@ -16,7 +16,7 @@ PicTextItem::PicTextItem(QGraphicsItem *parent, QGraphicsScene *scene, const Sou
setFlag(QGraphicsItem::ItemIsSelectable);
setFlag(QGraphicsItem::ItemIsFocusable);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
QFont f("Dinkie9");
QFont f("WenQuanYi7");
// font.setFamily("wenquanyi");
// font.setPixelSize(5);
f.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+1 -1
View File
@@ -58,7 +58,7 @@ struct TextItemModel {
int boldMultiple = 1;
int letterSpace = 0;
bool colorReversal = false;
QString fontFamily = "Dinkie9";
QString fontFamily = "WenQuanYi7";
int fontSize = 9;
std::function<QImage()> imageGenerator; // 图片生成函数