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

📄 q3progressdialog.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}/*!  Sets the cancel button to the push button, \a cancelButton. The  progress dialog takes ownership of this button which will be deleted  when necessary, so do not pass the address of an object that is on  the stack, i.e. use new() to create the button.  \sa setCancelButtonText()*/void Q3ProgressDialog::setCancelButton(QPushButton *cancelButton){    delete d->cancel;    d->cancel = cancelButton;    if (cancelButton) {        if (cancelButton->parentWidget() == this) {            cancelButton->hide(); // until we resize        } else {            cancelButton->setParent(this, 0);        }        connect(d->cancel, SIGNAL(clicked()), this, SIGNAL(canceled()));        new QShortcut(Qt::Key_Escape, this, SIGNAL(canceled()));    }    int w = qMax(isVisible() ? width() : 0, sizeHint().width());    int h = qMax(isVisible() ? height() : 0, sizeHint().height());    resize(w, h);    if (cancelButton)        cancelButton->show();}/*!  Sets the cancel button's text to \a cancelButtonText.  \sa setCancelButton()*/void Q3ProgressDialog::setCancelButtonText(const QString &cancelButtonText){    if (!cancelButtonText.isNull()) {        if (d->cancel)            d->cancel->setText(cancelButtonText);        else            setCancelButton(new QPushButton(cancelButtonText, this));    } else {        setCancelButton(0);    }    int w = qMax(isVisible() ? width() : 0, sizeHint().width());    int h = qMax(isVisible() ? height() : 0, sizeHint().height());    resize(w, h);}/*!  Sets the progress bar widget to \a bar. The progress dialog resizes to  fit. The progress dialog takes ownership of the progress \a bar which  will be deleted when necessary, so do not use a progress bar  allocated on the stack.*/void Q3ProgressDialog::setBar(Q3ProgressBar *bar){#ifndef QT_NO_DEBUG    if (progress() > 0)        qWarning("Q3ProgressDialog::setBar: Cannot set a new progress bar "                  "while the old one is active");#endif    delete d->bar;    d->bar = bar;    int w = qMax(isVisible() ? width() : 0, sizeHint().width());    int h = qMax(isVisible() ? height() : 0, sizeHint().height());    resize(w, h);}/*!  \property Q3ProgressDialog::wasCanceled  \brief whether the dialog was canceled  \sa setProgress()*/bool Q3ProgressDialog::wasCanceled() const{    return d->cancellation_flag;}/*!  \property Q3ProgressDialog::wasCancelled  \brief whether the dialog was canceled  \since 4.2  Use \l wasCanceled instead.*//*!    Use wasCanceled() instead.*/bool Q3ProgressDialog::wasCancelled() const{    return d->cancellation_flag;}/*!  \property Q3ProgressDialog::totalSteps  \brief the total number of steps  The default is 0.*/int Q3ProgressDialog::totalSteps() const{    if (d && d->bar)        return bar()->totalSteps();    return 0;}void Q3ProgressDialog::setTotalSteps(int totalSteps){    bar()->setTotalSteps(totalSteps);}/*!  Resets the progress dialog.  The progress dialog becomes hidden if autoClose() is true.  \sa setAutoClose(), setAutoReset()*/void Q3ProgressDialog::reset(){#ifndef QT_NO_CURSOR    if (progress() >= 0) {        if (d->creator)            d->creator->setCursor(d->parentCursor);    }#endif    if (d->autoClose || d->forceHide)        hide();    bar()->reset();    d->cancellation_flag = false;    d->shown_once = false;    forceTimer->stop();}/*!  Resets the progress dialog. wasCanceled() becomes true until  the progress dialog is reset.  The progress dialog becomes hidden.*/void Q3ProgressDialog::cancel(){    d->forceHide = true;    reset();    d->forceHide = false;    d->cancellation_flag = true;}/*!  \property Q3ProgressDialog::progress  \brief the current amount of progress made.  For the progress dialog to work as expected, you should initially set  this property to 0 and finally set it to  Q3ProgressDialog::totalSteps(); you can call setProgress() any number of times  in-between.  \warning If the progress dialog is modal    (see Q3ProgressDialog::Q3ProgressDialog()),    this function calls QApplication::processEvents(), so take care that    this does not cause undesirable re-entrancy in your code. For example,    don't use a Q3ProgressDialog inside a paintEvent()!  \sa totalSteps*/int Q3ProgressDialog::progress() const{    return bar()->progress();}void Q3ProgressDialog::setProgress(int progress){    if (progress == bar()->progress() ||         bar()->progress() == -1 && progress == bar()->totalSteps())        return;    bar()->setProgress(progress);    if (d->shown_once) {        if (isModal())            qApp->processEvents();    } else {        if (progress == 0) {#ifndef QT_NO_CURSOR            if (d->creator) {                d->parentCursor = d->creator->cursor();                d->creator->setCursor(Qt::WaitCursor);            }#endif            d->starttime.start();            forceTimer->start(d->showTime);            return;        } else {            bool need_show;            int elapsed = d->starttime.elapsed();            if (elapsed >= d->showTime) {                need_show = true;            } else {                if (elapsed > minWaitTime) {                    int estimate;                    if ((totalSteps() - progress) >= INT_MAX / elapsed)                        estimate = (totalSteps() - progress) / progress * elapsed;                    else                        estimate = elapsed * (totalSteps() - progress) / progress;                    need_show = estimate >= d->showTime;                } else {                    need_show = false;                }            }            if (need_show) {                int w = qMax(isVisible() ? width() : 0, sizeHint().width());                int h = qMax(isVisible() ? height() : 0, sizeHint().height());                resize(w, h);                show();                d->shown_once = true;            }        }#ifdef Q_WS_MAC        QApplication::flush();#endif    }    if (progress == bar()->totalSteps() && d->autoReset)        reset();}/*!  \overload  Sets the current amount of progress to \a progress and the total number of  steps to \a totalSteps.  \sa setTotalSteps()*/void Q3ProgressDialog::setProgress(int progress, int totalSteps){    setTotalSteps(totalSteps);    setProgress(progress);}/*!  Returns a size that fits the contents of the progress dialog.  The progress dialog resizes itself as required, so you should not  need to call this yourself.*/QSize Q3ProgressDialog::sizeHint() const{    QSize sh = label()->sizeHint();    QSize bh = bar()->sizeHint();    int h = margin_tb*2 + bh.height() + sh.height() + spacing;    if (d->cancel)        h += d->cancel->sizeHint().height() + spacing;    return QSize(qMax(200, sh.width() + 2*margin_lr), h);}/*!\reimp*/void Q3ProgressDialog::resizeEvent(QResizeEvent *){    layout();}/*!  \reimp*/void Q3ProgressDialog::changeEvent(QEvent *ev){    if(ev->type() == QEvent::StyleChange)        layout();    QDialog::changeEvent(ev);}void Q3ProgressDialog::layout(){    int sp = spacing;    int mtb = margin_tb;    int mlr = qMin(width()/10, margin_lr);    const bool centered =        bool(style()->styleHint(QStyle::SH_ProgressDialog_CenterCancelButton, 0, this));    QSize cs = d->cancel ? d->cancel->sizeHint() : QSize(0,0);    QSize bh = bar()->sizeHint();    int cspc;    int lh = 0;    // Find spacing and sizes that fit.  It is important that a progress    // dialog can be made very small if the user demands it so.    for (int attempt=5; attempt--;) {        cspc = d->cancel ? cs.height() + sp : 0;        lh = qMax(0, height() - mtb - bh.height() - sp - cspc);        if (lh < height()/4) {            // Getting cramped            sp /= 2;            mtb /= 2;            if (d->cancel) {                cs.setHeight(qMax(4,cs.height()-sp-2));            }            bh.setHeight(qMax(4,bh.height()-sp-1));        } else {            break;        }    }    if (d->cancel) {        d->cancel->setGeometry(            centered ? width()/2 - cs.width()/2 : width() - mlr - cs.width(),            height() - mtb - cs.height() + sp,            cs.width(), cs.height());    }    label()->setGeometry(mlr, 0, width()-mlr*2, lh);    bar()->setGeometry(mlr, lh+sp, width()-mlr*2, bh.height());}/*!    \property Q3ProgressDialog::minimumDuration    \brief the time that must pass before the dialog appears    If the expected duration of the task is less than the    minimumDuration, the dialog will not appear at all. This prevents    the dialog popping up for tasks that are quickly over. For tasks    that are expected to exceed the minimumDuration, the dialog will    pop up after the minimumDuration time or as soon as any progress    is set.    If set to 0, the dialog is always shown as soon as any progress is    set. The default is 4000 milliseconds.*/void Q3ProgressDialog::setMinimumDuration(int ms){    d->showTime = ms;    if (bar()->progress() == 0) {        forceTimer->stop();        forceTimer->start(ms);    }}int Q3ProgressDialog::minimumDuration() const{    return d->showTime;}/*!  \reimp*/void Q3ProgressDialog::closeEvent(QCloseEvent *e){    emit canceled();    QDialog::closeEvent(e);}/*!  \property Q3ProgressDialog::autoReset  \brief whether the progress dialog calls reset() as soon as progress() equals totalSteps()  The default is true.  \sa setAutoClose()*/void Q3ProgressDialog::setAutoReset(bool b){    d->autoReset = b;}bool Q3ProgressDialog::autoReset() const{    return d->autoReset;}/*!  \property Q3ProgressDialog::autoClose  \brief whether the dialog gets hidden by reset()  The default is true.  \sa setAutoReset()*/void Q3ProgressDialog::setAutoClose(bool b){    d->autoClose = b;}bool Q3ProgressDialog::autoClose() const{    return d->autoClose;}/*!  \reimp*/void Q3ProgressDialog::showEvent(QShowEvent *e){    QDialog::showEvent(e);    int w = qMax(isVisible() ? width() : 0, sizeHint().width());    int h = qMax(isVisible() ? height() : 0, sizeHint().height());    resize(w, h);    forceTimer->stop();}/*!  Shows the dialog if it is still hidden after the algorithm has been started  and minimumDuration milliseconds have passed.  \sa setMinimumDuration()*/void Q3ProgressDialog::forceShow(){    if (d->shown_once || d->cancellation_flag)        return;    show();    d->shown_once = true;}#endif

⌨️ 快捷键说明

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