修复状态机的部分异常、计数器编辑与预览更新、修复时间、轮班图元的高度多一行的问题
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <QFontMetrics>
|
||||
#include <QString>
|
||||
#include <QHash>
|
||||
#include <QPainter>
|
||||
|
||||
QHash<QString, int> defCharWidthMap;
|
||||
|
||||
@@ -27,10 +28,10 @@ QVariant PicCounterItem::source()
|
||||
void PicCounterItem::setSource(QVariant var)
|
||||
{
|
||||
PicTextItem::setSource(var);
|
||||
setCounter(counterType(), digitalNum());
|
||||
setCounter(counterType(), digitalNum(), m_displayNum);
|
||||
}
|
||||
|
||||
void PicCounterItem::setCounter(COUNTER_TYPE type, int digitalNum)
|
||||
void PicCounterItem::setCounter(COUNTER_TYPE type, int digitalNum, int displayNum)
|
||||
{
|
||||
if(type != COUNTER_TYPE_1 && type != COUNTER_TYPE_2) {
|
||||
qWarning() << "Missing counter type: " << type;
|
||||
@@ -63,9 +64,30 @@ void PicCounterItem::setCounter(COUNTER_TYPE type, int digitalNum)
|
||||
int height = font.pixelSize();
|
||||
width += letterSpace();
|
||||
|
||||
// 计算像素长度最长的数字 0 - 9
|
||||
int digital = 0;
|
||||
int digitalWidth = 0;
|
||||
for(int i = 0; i <= 9; ++i) {
|
||||
auto w = fontMetrics.horizontalAdvance(QString::number(i));
|
||||
if(w > digitalWidth) {
|
||||
digitalWidth = w;
|
||||
digital = i;
|
||||
}
|
||||
}
|
||||
|
||||
m_counterType = type;
|
||||
m_digitalNum = qBound(1, digitalNum, 8);
|
||||
m_digitalImg = strToImage(QString("8").repeated(m_digitalNum));
|
||||
m_digitalImg = strToImage(QString::number(digital).repeated(m_digitalNum));
|
||||
m_displayNum = displayNum;
|
||||
|
||||
// 临时使用这种手法显示当前值吧
|
||||
m_digitalImg.fill(0x00000000);
|
||||
auto displayNumImage = strToImage(QString::number(displayNum).rightJustified(m_digitalNum, '0').right(m_digitalNum));
|
||||
QPainter p;
|
||||
p.begin(&m_digitalImg);
|
||||
p.drawImage(QPoint(0, 0), displayNumImage);
|
||||
p.end();
|
||||
|
||||
applyModify();
|
||||
|
||||
qInfo() << "Counter item set to " << type ;
|
||||
@@ -84,7 +106,7 @@ int PicCounterItem::charWidth()
|
||||
void PicCounterItem::setCharWidth(int width)
|
||||
{
|
||||
m_charWidthMap[font().family()] = width;
|
||||
setCounter(counterType(), digitalNum());
|
||||
setCounter(counterType(), digitalNum(), m_displayNum);
|
||||
}
|
||||
|
||||
QImage PicCounterItem::itemImage()
|
||||
@@ -96,6 +118,7 @@ void PicCounterItem::setCustomAttrs(const QXmlStreamAttributes &attrs)
|
||||
{
|
||||
auto typeRef = attrs.value("counter_type");
|
||||
auto digitalNumRef = attrs.value("digital_num");
|
||||
auto displayNumRef = attrs.value("display_num");
|
||||
|
||||
bool ok = false;
|
||||
int counterType = typeRef.toInt(&ok);
|
||||
@@ -111,7 +134,14 @@ void PicCounterItem::setCustomAttrs(const QXmlStreamAttributes &attrs)
|
||||
return;
|
||||
}
|
||||
|
||||
setCounter(static_cast<COUNTER_TYPE>(counterType), digitalNum);
|
||||
ok = false;
|
||||
int displayNum = displayNumRef.toInt(&ok);
|
||||
if(!ok || displayNum <= 0) {
|
||||
qWarning() << "Invalied counter display number: " << displayNum;
|
||||
return;
|
||||
}
|
||||
|
||||
setCounter(static_cast<COUNTER_TYPE>(counterType), digitalNum, displayNum);
|
||||
qInfo() << "Loaded attrs from xml: " << " counter type: " << counterType << ", digitalNum: " << digitalNum;
|
||||
}
|
||||
|
||||
@@ -119,6 +149,7 @@ void PicCounterItem::saveCustomAttrs(QXmlStreamAttributes &attrs)
|
||||
{
|
||||
attrs.append("counter_type", QString::number(counterType()));
|
||||
attrs.append("digital_num", QString::number(digitalNum()));
|
||||
attrs.append("display_num", QString::number(m_displayNum));
|
||||
qInfo() << "Set attrs to xml: " << " counter type: " << counterType() << ", digitalNum: " << digitalNum();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user