修复因场景模式修改为绝对坐标引起的打印补全、蜂鸣器报警改为常响、添加相位故障关闭回收槽功能、取消翻转上下颠倒,与莱宾格行为同步、修改场景模式默认字体为7点、取消变量占位图设计
This commit is contained in:
+15
-10
@@ -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);
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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; // 图片生成函数
|
||||
|
||||
Reference in New Issue
Block a user