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

📄 q3datetimeedit.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        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 + -