196 static const char segments[30][8] =
197 { { 0, 1, 2, 4, 5, 6,99, 0},
198 { 2, 5,99, 0, 0, 0, 0, 0},
199 { 0, 2, 3, 4, 6,99, 0, 0},
200 { 0, 2, 3, 5, 6,99, 0, 0},
201 { 1, 2, 3, 5,99, 0, 0, 0},
202 { 0, 1, 3, 5, 6,99, 0, 0},
203 { 0, 1, 3, 4, 5, 6,99, 0},
204 { 0, 2, 5,99, 0, 0, 0, 0},
205 { 0, 1, 2, 3, 4, 5, 6,99},
206 { 0, 1, 2, 3, 5, 6,99, 0},
207 { 3,99, 0, 0, 0, 0, 0, 0},
208 { 7,99, 0, 0, 0, 0, 0, 0},
209 { 0, 1, 2, 3, 4, 5,99, 0},
210 { 1, 3, 4, 5, 6,99, 0, 0},
211 { 0, 1, 4, 6,99, 0, 0, 0},
212 { 2, 3, 4, 5, 6,99, 0, 0},
213 { 0, 1, 3, 4, 6,99, 0, 0},
214 { 0, 1, 3, 4,99, 0, 0, 0},
215 { 1, 3, 4, 5,99, 0, 0, 0},
216 { 1, 2, 3, 4, 5,99, 0, 0},
217 { 1, 4, 6,99, 0, 0, 0, 0},
218 { 3, 4, 5, 6,99, 0, 0, 0},
219 { 0, 1, 2, 3, 4,99, 0, 0},
220 { 3, 4,99, 0, 0, 0, 0, 0},
221 { 4, 5, 6,99, 0, 0, 0, 0},
222 { 1, 2, 4, 5, 6,99, 0, 0},
223 { 1, 2, 3, 5, 6,99, 0, 0},
224 { 8, 9,99, 0, 0, 0, 0, 0},
225 { 0, 1, 2, 3,99, 0, 0, 0},
226 {99, 0, 0, 0, 0, 0, 0, 0} };
228 if (ch >=
'0' && ch <=
'9')
229 return segments[ch -
'0'];
230 if (ch >=
'A' && ch <=
'F')
231 return segments[ch -
'A' + 12];
232 if (ch >=
'a' && ch <=
'f')
233 return segments[ch -
'a' + 12];
357void QLCDNumber::setDigitCount(
int numDigits)
360 if (Q_UNLIKELY(numDigits > 99)) {
361 qWarning(
"QLCDNumber::setNumDigits: (%s) Max 99 digits allowed",
362 objectName().toLocal8Bit().constData());
365 if (Q_UNLIKELY(numDigits < 0)) {
366 qWarning(
"QLCDNumber::setNumDigits: (%s) Min 0 digits allowed",
367 objectName().toLocal8Bit().constData());
370 if (d->digitStr.isNull()) {
371 d->ndigits = numDigits;
372 d->digitStr.fill(u' ', d->ndigits);
373 d->points.fill(0, d->ndigits);
374 d->digitStr[d->ndigits - 1] = u'0';
376 bool doDisplay = d->ndigits == 0;
377 if (numDigits == d->ndigits)
381 if (numDigits > d->ndigits) {
382 dif = numDigits - d->ndigits;
385 d->digitStr.insert(0, buf);
386 d->points.resize(numDigits);
387 for (i=numDigits-1; i>=dif; i--)
388 d->points.setBit(i, d->points.testBit(i-dif));
389 for (i=0; i<dif; i++)
390 d->points.clearBit(i);
392 dif = d->ndigits - numDigits;
393 d->digitStr = d->digitStr.right(numDigits);
394 QBitArray tmpPoints = d->points;
395 d->points.resize(numDigits);
396 for (i=0; i<numDigits; i++)
397 d->points.setBit(i, tmpPoints.testBit(i+dif));
399 d->ndigits = numDigits;
836 int segLen,
bool erase)
841 int width = segLen/5;
843 const QPalette &pal = q->palette();
844 QColor lightColor,darkColor,fgColor;
846 lightColor = pal.color(q->backgroundRole());
847 darkColor = lightColor;
848 fgColor = lightColor;
850 lightColor = pal.light().color();
851 darkColor = pal.dark().color();
852 fgColor = pal.color(q->foregroundRole());
856#define LINETO(X,Y) addPoint(a, QPoint(pt.x() + (X),pt.y() + (Y)))
870 LINETO(segLen - width - 1,width);
880 LINETO(width,segLen - width/2 - 2);
886 pt += QPoint(segLen - 1 , 1);
890 LINETO(-width,segLen - width/2 - 2);
896 pt += QPoint(0 , segLen);
900 LINETO(segLen - width - 1,-width/2);
904 LINETO(segLen - width - 3,width/2 + 1);
905 LINETO(width + 2,width/2 + 1);
907 LINETO(segLen - width - 1,width/2);
913 pt += QPoint(0 , segLen + 1);
918 LINETO(width,segLen - width - 2);
924 pt += QPoint(segLen - 1 , segLen + 1);
928 LINETO(-width,segLen - width - 2);
934 pt += QPoint(0 , segLen*2);
938 LINETO(segLen - width - 1,-width);
945 pt += QPoint(segLen + width/2 , segLen*2);
947 pt += QPoint(segLen/2 , segLen*2);
957 pt += QPoint(segLen/2 - width/2 + 1 , segLen/2 + width);
967 pt += QPoint(segLen/2 - width/2 + 1 , 3*segLen/2 + width);
977 qWarning(
"QLCDNumber::drawSegment: (%s) Illegal segment id: %d\n",
978 q->objectName().toLocal8Bit().constData(), segmentNo);
984 p.setBrush(Qt::NoBrush);
992#define LINETO(X,Y) p.drawLine(ppt.x(), ppt.y(), pt.x()+(X), pt.y()+(Y));
993 ppt = QPoint(pt.x()+(X), pt.y()+(Y))
994#define LIGHT p.setPen(lightColor)
995#define DARK p.setPen(darkColor)
1003 LINETO(segLen - width - 1,width);
1013 LINETO(width,segLen - width/2 - 2);
1019 pt += QPoint(segLen - 1 , 1);
1023 LINETO(-width,segLen - width/2 - 2);
1029 pt += QPoint(0 , segLen);
1033 LINETO(segLen - width - 1,-width/2);
1037 LINETO(segLen - width - 3,width/2 + 1);
1038 LINETO(width + 2,width/2 + 1);
1040 LINETO(segLen - width - 1,width/2);
1046 pt += QPoint(0 , segLen + 1);
1051 LINETO(width,segLen - width - 2);
1057 pt += QPoint(segLen - 1 , segLen + 1);
1061 LINETO(-width,segLen - width - 2);
1067 pt += QPoint(0 , segLen*2);
1071 LINETO(segLen - width - 1,-width);
1078 pt += QPoint(segLen + width/2 , segLen*2);
1080 pt += QPoint(segLen/2 , segLen*2);
1090 pt += QPoint(segLen/2 - width/2 + 1 , segLen/2 + width);
1100 pt += QPoint(segLen/2 - width/2 + 1 , 3*segLen/2 + width);
1110 qWarning(
"QLCDNumber::drawSegment: (%s) Illegal segment id: %d\n",
1111 q->objectName().toLocal8Bit().constData(), segmentNo);