📄 q3datetimeedit.cpp
字号:
else setMinute(d->min.minute()); break; case 2: if (!outOfRange(d->h, d->m, d->s+1)) setSecond(d->s+1); else setSecond(d->min.second()); break; case 3: if (d->h < 12) setHour(d->h+12); else setHour(d->h-12); break; default: accepted = false; qWarning("Q3TimeEdit::stepUp: Focus section out of range!"); break; } if (accepted) { d->changed = false; emit valueChanged(time()); } d->ed->repaint(d->ed->rect());}/*! \reimp*/void Q3TimeEdit::stepDown(){ int sec = d->ed->mapSection(d->ed->focusSection()); bool accepted = true; switch(sec) { case 0: if (!outOfRange(d->h-1, d->m, d->s)) setHour(d->h-1); else setHour(d->max.hour()); break; case 1: if (!outOfRange(d->h, d->m-1, d->s)) setMinute(d->m-1); else setMinute(d->max.minute()); break; case 2: if (!outOfRange(d->h, d->m, d->s-1)) setSecond(d->s-1); else setSecond(d->max.second()); break; case 3: if (d->h > 11) setHour(d->h-12); else setHour(d->h+12); break; default: accepted = false; qWarning("Q3TimeEdit::stepDown: Focus section out of range!"); break; } if (accepted) { d->changed = false; emit valueChanged(time()); } d->ed->repaint(d->ed->rect());}/*! Returns the formatted number for section \a sec. This will correspond to either the hour, minute or second section, depending on \a sec.*/QString Q3TimeEdit::sectionFormattedText(int sec){ QString txt; txt = sectionText(sec); txt = txt.rightJustified(2, QDATETIMEEDIT_HIDDEN_CHAR); int offset = sec*2+sec*separator().length() + txt.length(); if (d->typing && sec == d->ed->focusSection()) d->ed->setSectionSelection(sec, offset - txt.length(), offset); else d->ed->setSectionSelection(sec, offset - txt.length(), offset); return txt;}/*! \reimp*/bool Q3TimeEdit::setFocusSection(int sec){ if (sec != d->ed->focusSection()) { killTimer(d->timerId); d->overwrite = true; d->typing = false; QString txt = sectionText(sec); txt = txt.rightJustified(2, QDATETIMEEDIT_HIDDEN_CHAR); int offset = sec*2+sec*separator().length() + txt.length(); d->ed->setSectionSelection(sec, offset - txt.length(), offset); if (d->changed) { emit valueChanged(time()); d->changed = false; } } return d->ed->setFocusSection(sec);}/*! Sets the hour to \a h, which must be a valid hour, i.e. in the range 0..24.*/void Q3TimeEdit::setHour(int h){ if (h < 0) h = 0; if (h > 23) h = 23; d->h = h;}/*! Sets the minute to \a m, which must be a valid minute, i.e. in the range 0..59.*/void Q3TimeEdit::setMinute(int m){ if (m < 0) m = 0; if (m > 59) m = 59; d->m = m;}/*! Sets the second to \a s, which must be a valid second, i.e. in the range 0..59.*/void Q3TimeEdit::setSecond(int s){ if (s < 0) s = 0; if (s > 59) s = 59; d->s = s;}/*! \internal Returns the text of section \a sec.*/QString Q3TimeEdit::sectionText(int sec){ sec = d->ed->mapSection(sec); QString txt; switch(sec) { case 0: if (!(d->display & AMPM) || (d->h < 13 && d->h)) { // I wished the day stared at 0:00 for everybody txt = QString::number(d->h); } else { if (d->h) txt = QString::number(d->h - 12); else txt = "12"; } break; case 1: txt = QString::number(d->m); break; case 2: txt = QString::number(d->s); break; case 3: if (d->h < 12) { if (lAM) txt = *lAM; else txt = QString::fromLatin1("AM"); } else { if (lPM) txt = *lPM; else txt = QString::fromLatin1("PM"); } break; default: break; } return txt;}/*! \internal Returns true if \a h, \a m, and \a s are out of range. */bool Q3TimeEdit::outOfRange(int h, int m, int s) const{ if (QTime::isValid(h, m, s)) { QTime currentTime(h, m, s); if (currentTime > maxValue() || currentTime < minValue()) return true; else return false; } return true;}/*! \reimp*/void Q3TimeEdit::addNumber(int sec, int num){ if (sec == -1) return; sec = d->ed->mapSection(sec); killTimer(d->timerId); bool overwrite = false; bool accepted = false; d->typing = true; QString txt; switch(sec) { case 0: txt = (d->display & AMPM && d->h > 12) ? QString::number(d->h - 12) : QString::number(d->h); if (d->overwrite || txt.length() == 2) { if (d->display & AMPM && num == 0) break; // Don't process 0 in 12 hour clock mode if (d->display & AMPM && d->h > 11) num += 12; if (!outOfRange(num, d->m, d->s)) { accepted = true; d->h = num; } } else { txt += QString::number(num); int temp = txt.toInt(); if (d->display & AMPM) { if (temp == 12) { if (d->h < 12) { temp = 0; } accepted = true; } else if (outOfRange(temp + 12, d->m, d->s)) { txt = QString::number(d->h); } else { if (d->h > 11) { temp += 12; } accepted = true; } } else if (!(d->display & AMPM) && outOfRange(temp, d->m, d->s)) { txt = QString::number(d->h); } else { accepted = true; } if (accepted) d->h = temp; if (d->adv && txt.length() == 2) { setFocusSection(d->ed->focusSection()+1); overwrite = true; } } break; case 1: txt = QString::number(d->m); if (d->overwrite || txt.length() == 2) { if (!outOfRange(d->h, num, d->s)) { accepted = true; d->m = num; } } else { txt += QString::number(num); int temp = txt.toInt(); if (temp > 59) temp = num; if (outOfRange(d->h, temp, d->s)) txt = QString::number(d->m); else { accepted = true; d->m = temp; } if (d->adv && txt.length() == 2) { setFocusSection(d->ed->focusSection()+1); overwrite = true; } } break; case 2: txt = QString::number(d->s); if (d->overwrite || txt.length() == 2) { if (!outOfRange(d->h, d->m, num)) { accepted = true; d->s = num; } } else { txt += QString::number(num); int temp = txt.toInt(); if (temp > 59) temp = num; if (outOfRange(d->h, d->m, temp)) txt = QString::number(d->s); else { accepted = true; d->s = temp; } if (d->adv && txt.length() == 2) { setFocusSection(d->ed->focusSection()+1); overwrite = true; } } break; case 3: break; default: break; } d->changed = !accepted; if (accepted) emit valueChanged(time()); d->overwrite = overwrite; d->timerId = startTimer(qApp->doubleClickInterval()*4); d->ed->repaint(d->ed->rect());}/*! \internal Function which is called whenever the user tries to remove the first number from \a sec by pressing the backspace key.*/void Q3TimeEdit::removeFirstNumber(int sec){ if (sec == -1) return; sec = d->ed->mapSection(sec); QString txt; switch(sec) { case 0: txt = QString::number(d->h); break; case 1: txt = QString::number(d->m); break; case 2: txt = QString::number(d->s); break; } txt = txt.mid(1, txt.length()) + "0"; switch(sec) { case 0: d->h = txt.toInt(); break; case 1: d->m = txt.toInt(); break; case 2: d->s = txt.toInt(); break; } d->ed->repaint(d->ed->rect());}/*! \reimp*/void Q3TimeEdit::removeLastNumber(int sec){ if (sec == -1) return; sec = d->ed->mapSection(sec); QString txt; switch(sec) { case 0: txt = QString::number(d->h); break; case 1: txt = QString::number(d->m); break; case 2: txt = QString::number(d->s); break; } txt = txt.mid(0, txt.length()-1); switch(sec) { case 0: d->h = txt.toInt(); break; case 1: d->m = txt.toInt(); break; case 2: d->s = txt.toInt(); break; } d->ed->repaint(d->ed->rect());}/*! \reimp */void Q3TimeEdit::resizeEvent(QResizeEvent *){ d->controls->resize(width(), height());}/*! \reimp*/QSize Q3TimeEdit::sizeHint() const{ ensurePolished(); QFontMetrics fm(font()); int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); int h = fm.lineSpacing() + 2; int w = 2 + fm.width('9') * 6 + fm.width(d->ed->separator()) * 2 + d->controls->upRect().width() + fw * 4; if (d->display & AMPM) { if (lAM) w += fm.width(*lAM) + 4; else w += fm.width(QString::fromLatin1("AM")) + 4; } return QSize(w, qMax(h + fw * 2,20)).expandedTo(QApplication::globalStrut());}/*! \reimp*/QSize Q3TimeEdit::minimumSizeHint() const{ return sizeHint();}/*! \internal Enables/disables the push buttons according to the min/max time for this widget.*/// ### Remove in 4.0?void Q3TimeEdit::updateButtons(){ if (!isEnabled()) return; bool upEnabled = time() < maxValue(); bool downEnabled = time() > minValue(); d->controls->setUpEnabled(upEnabled); d->controls->setDownEnabled(downEnabled);}class Q3DateTimeEditPrivate{public: bool adv;};/*! \class Q3DateTimeEdit q3datetimeedit.h \brief The Q3DateTimeEdit class combines a Q3DateEdit and Q3TimeEdit widget into a single widget for editing datetimes. \compat Q3DateTimeEdit consists of a Q3DateEdit and Q3TimeEdit widget placed side by side and offers the functionality of both. The user can edit the date and time by using the keyboard or the arrow keys to increase/decrease date or time values. The Tab key can be used to move from section to section within the Q3DateTimeEdit widget, and the user can be moved automatically when they complete a section using setAutoAdvance(). The datetime can be set with setDateTime(). The date format is read from the system's locale settings. It is set to year, month, day order if that is not possible. See Q3DateEdit::setOrder() to change this. Times appear in the order hours, minutes, seconds using the 24 hour clock. It is recommended that the Q3DateTimeEdit is initialised with a datetime, e.g. \code Q3DateTimeEdit *dateTimeEdit = new Q3DateTimeEdit(QDateTime::currentDateTime(), this); dateTimeEdit->dateEdit()->setRange(QDateTime::currentDate(), QDateTime::currentDate().addDays(7)); \endcode Here we've create
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -