⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 q3datetimeedit.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
*/void Q3TimeEdit::stepUp(){    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->min.hour());        break;    case 1:        if (!outOfRange(d->h, d->m+1, d->s))            setMinute(d->m+1);        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()) {        if (d->timerId)            killTimer(d->timerId);        d->timerId = 0;        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 = QLatin1String("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);    if (d->timerId)        killTimer(d->timerId);    d->timerId = 0;    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()) + QLatin1Char('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(QLatin1Char('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.*/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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -