200 static const char segments[30][8] =
201 { { 0, 1, 2, 4, 5, 6,99, 0},
202 { 2, 5,99, 0, 0, 0, 0, 0},
203 { 0, 2, 3, 4, 6,99, 0, 0},
204 { 0, 2, 3, 5, 6,99, 0, 0},
205 { 1, 2, 3, 5,99, 0, 0, 0},
206 { 0, 1, 3, 5, 6,99, 0, 0},
207 { 0, 1, 3, 4, 5, 6,99, 0},
208 { 0, 2, 5,99, 0, 0, 0, 0},
209 { 0, 1, 2, 3, 4, 5, 6,99},
210 { 0, 1, 2, 3, 5, 6,99, 0},
211 { 3,99, 0, 0, 0, 0, 0, 0},
212 { 7,99, 0, 0, 0, 0, 0, 0},
213 { 0, 1, 2, 3, 4, 5,99, 0},
214 { 1, 3, 4, 5, 6,99, 0, 0},
215 { 0, 1, 4, 6,99, 0, 0, 0},
216 { 2, 3, 4, 5, 6,99, 0, 0},
217 { 0, 1, 3, 4, 6,99, 0, 0},
218 { 0, 1, 3, 4,99, 0, 0, 0},
219 { 1, 3, 4, 5,99, 0, 0, 0},
220 { 1, 2, 3, 4, 5,99, 0, 0},
221 { 1, 4, 6,99, 0, 0, 0, 0},
222 { 3, 4, 5, 6,99, 0, 0, 0},
223 { 0, 1, 2, 3, 4,99, 0, 0},
224 { 3, 4,99, 0, 0, 0, 0, 0},
225 { 4, 5, 6,99, 0, 0, 0, 0},
226 { 1, 2, 4, 5, 6,99, 0, 0},
227 { 1, 2, 3, 5, 6,99, 0, 0},
228 { 8, 9,99, 0, 0, 0, 0, 0},
229 { 0, 1, 2, 3,99, 0, 0, 0},
230 {99, 0, 0, 0, 0, 0, 0, 0} };
232 if (ch >=
'0' && ch <=
'9')
233 return segments[ch -
'0'];
234 if (ch >=
'A' && ch <=
'F')
235 return segments[ch -
'A' + 12];
236 if (ch >=
'a' && ch <=
'f')
237 return segments[ch -
'a' + 12];
361void QLCDNumber::setDigitCount(
int numDigits)
364 if (Q_UNLIKELY(numDigits > 99)) {
365 qWarning(
"QLCDNumber::setNumDigits: (%s) Max 99 digits allowed",
366 objectName().toLocal8Bit().constData());
369 if (Q_UNLIKELY(numDigits < 0)) {
370 qWarning(
"QLCDNumber::setNumDigits: (%s) Min 0 digits allowed",
371 objectName().toLocal8Bit().constData());
374 if (d->digitStr.isNull()) {
375 d->ndigits = numDigits;
376 d->digitStr.fill(u' ', d->ndigits);
377 d->points.fill(0, d->ndigits);
378 d->digitStr[d->ndigits - 1] = u'0';
380 bool doDisplay = d->ndigits == 0;
381 if (numDigits == d->ndigits)
385 if (numDigits > d->ndigits) {
386 dif = numDigits - d->ndigits;
389 d->digitStr.insert(0, buf);
390 d->points.resize(numDigits);
391 for (i=numDigits-1; i>=dif; i--)
392 d->points.setBit(i, d->points.testBit(i-dif));
393 for (i=0; i<dif; i++)
394 d->points.clearBit(i);
396 dif = d->ndigits - numDigits;
397 d->digitStr = d->digitStr.right(numDigits);
398 QBitArray tmpPoints = d->points;
399 d->points.resize(numDigits);
400 for (i=0; i<numDigits; i++)
401 d->points.setBit(i, tmpPoints.testBit(i+dif));
403 d->ndigits = numDigits;
840 int segLen,
bool erase)
845 int width = segLen/5;
847 const QPalette &pal = q->palette();
848 QColor lightColor,darkColor,fgColor;
850 lightColor = pal.color(q->backgroundRole());
851 darkColor = lightColor;
852 fgColor = lightColor;
854 lightColor = pal.light().color();
855 darkColor = pal.dark().color();
856 fgColor = pal.color(q->foregroundRole());
860#define LINETO(X,Y) addPoint(a, QPoint(pt.x() + (X),pt.y() + (Y)))
874 LINETO(segLen - width - 1,width);
884 LINETO(width,segLen - width/2 - 2);
890 pt += QPoint(segLen - 1 , 1);
894 LINETO(-width,segLen - width/2 - 2);
900 pt += QPoint(0 , segLen);
904 LINETO(segLen - width - 1,-width/2);
908 LINETO(segLen - width - 3,width/2 + 1);
909 LINETO(width + 2,width/2 + 1);
911 LINETO(segLen - width - 1,width/2);
917 pt += QPoint(0 , segLen + 1);
922 LINETO(width,segLen - width - 2);
928 pt += QPoint(segLen - 1 , segLen + 1);
932 LINETO(-width,segLen - width - 2);
938 pt += QPoint(0 , segLen*2);
942 LINETO(segLen - width - 1,-width);
949 pt += QPoint(segLen + width/2 , segLen*2);
951 pt += QPoint(segLen/2 , segLen*2);
961 pt += QPoint(segLen/2 - width/2 + 1 , segLen/2 + width);
971 pt += QPoint(segLen/2 - width/2 + 1 , 3*segLen/2 + width);
981 qWarning(
"QLCDNumber::drawSegment: (%s) Illegal segment id: %d\n",
982 q->objectName().toLocal8Bit().constData(), segmentNo);
988 p.setBrush(Qt::NoBrush);
996#define LINETO(X,Y) p.drawLine(ppt.x(), ppt.y(), pt.x()+(X), pt.y()+(Y));
997 ppt = QPoint(pt.x()+(X), pt.y()+(Y))
998#define LIGHT p.setPen(lightColor)
999#define DARK p.setPen(darkColor)
1001 switch (segmentNo) {
1007 LINETO(segLen - width - 1,width);
1017 LINETO(width,segLen - width/2 - 2);
1023 pt += QPoint(segLen - 1 , 1);
1027 LINETO(-width,segLen - width/2 - 2);
1033 pt += QPoint(0 , segLen);
1037 LINETO(segLen - width - 1,-width/2);
1041 LINETO(segLen - width - 3,width/2 + 1);
1042 LINETO(width + 2,width/2 + 1);
1044 LINETO(segLen - width - 1,width/2);
1050 pt += QPoint(0 , segLen + 1);
1055 LINETO(width,segLen - width - 2);
1061 pt += QPoint(segLen - 1 , segLen + 1);
1065 LINETO(-width,segLen - width - 2);
1071 pt += QPoint(0 , segLen*2);
1075 LINETO(segLen - width - 1,-width);
1082 pt += QPoint(segLen + width/2 , segLen*2);
1084 pt += QPoint(segLen/2 , segLen*2);
1094 pt += QPoint(segLen/2 - width/2 + 1 , segLen/2 + width);
1104 pt += QPoint(segLen/2 - width/2 + 1 , 3*segLen/2 + width);
1114 qWarning(
"QLCDNumber::drawSegment: (%s) Illegal segment id: %d\n",
1115 q->objectName().toLocal8Bit().constData(), segmentNo);