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

📄 qdialog.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                        pb->click();                    return;                }            }        }        break;        case Qt::Key_Escape:            reject();            break;        case Qt::Key_Up:        case Qt::Key_Left:            if (focusWidget() &&                 (focusWidget()->focusPolicy() == Qt::StrongFocus ||                   focusWidget()->focusPolicy() == Qt::WheelFocus)) {                e->ignore();                break;            }            // call ours, since c++ blocks us from calling the one            // belonging to focusWidget().            focusNextPrevChild(false);            break;        case Qt::Key_Down:        case Qt::Key_Right:            if (focusWidget() &&                 (focusWidget()->focusPolicy() == Qt::StrongFocus ||                   focusWidget()->focusPolicy() == Qt::WheelFocus)) {                e->ignore();                break;            }            focusNextPrevChild(true);            break;        default:            e->ignore();            return;        }    } else {        e->ignore();    }}/*! \reimp */void QDialog::closeEvent(QCloseEvent *e){#ifndef QT_NO_WHATSTHIS    if (isModal() && QWhatsThis::inWhatsThisMode())        QWhatsThis::leaveWhatsThisMode();#endif    if (isVisible())        reject();    else        e->accept();}#ifdef Q_OS_TEMP/*! \internal    \reimp*/bool QDialog::event(QEvent *e){    switch (e->type()) {    case QEvent::OkRequest:    case QEvent::HelpRequest: {        QString bName =            (e->type() == QEvent::OkRequest)            ? qApp->translate("QMessageBox", mb_texts[QMessageBox::Ok])            : qApp->translate("QMessageBox", "Help");        QList<QPushButton*> list = qFindChildren<QPushButton*>(this);        for (int i=0; i<list.size(); ++i) {            QPushButton *pb = list.at(i);            if (pb->text() == bName) {                if (pb->isEnabled())                    pb->click();                return pb->isEnabled();            }        } }    default: break;    }    return QWidget::event(e);}#endif/*****************************************************************************  Geometry management. *****************************************************************************//*! \reimp*/void QDialog::setVisible(bool visible){    Q_D(QDialog);    if (visible) {        if (isVisible())            return;#ifdef Q_OS_TEMP        hideSpecial();#endif        if (!testAttribute(Qt::WA_Moved)) {            Qt::WindowStates state = windowState();            adjustPosition(parentWidget());            setAttribute(Qt::WA_Moved, false); // not really an explicit position            if (state != windowState())                setWindowState(state);        }        QWidget::setVisible(visible);        showExtension(d->doShowExtension);        QWidget *fw = window()->focusWidget();        if (!fw)            fw = this;        /*          The following block is to handle a special case, and does not          really follow propper logic in concern of autoDefault and TAB          order. However, it's here to ease usage for the users. If a          dialog has a default QPushButton, and first widget in the TAB          order also is a QPushButton, then we give focus to the main          default QPushButton. This simplifies code for the developers,          and actually catches most cases... If not, then they simply          have to use [widget*]->setFocus() themselves...        */        if (d->mainDef && fw->focusPolicy() == Qt::NoFocus) {            QWidget *first = fw;            while ((first = first->nextInFocusChain()) != fw && first->focusPolicy() == Qt::NoFocus)                ;            if (first != d->mainDef && qobject_cast<QPushButton*>(first))                d->mainDef->setFocus();        }        if (!d->mainDef && isWindow()) {            QWidget *w = fw;            while ((w = w->nextInFocusChain()) != fw) {                QPushButton *pb = qobject_cast<QPushButton *>(w);                if (pb && pb->autoDefault() && pb->focusPolicy() != Qt::NoFocus) {                    pb->setDefault(true);                    break;                }            }        }        if (fw && !fw->hasFocus()) {            QFocusEvent e(QEvent::FocusIn, Qt::TabFocusReason);            QApplication::sendEvent(fw, &e);        }#ifndef QT_NO_ACCESSIBILITY        QAccessible::updateAccessibility(this, 0, QAccessible::DialogStart);#endif    } else {        if (!isVisible())            return;#ifndef QT_NO_ACCESSIBILITY        if (isVisible())            QAccessible::updateAccessibility(this, 0, QAccessible::DialogEnd);#endif        // Reimplemented to exit a modal event loop when the dialog is hidden.        QWidget::setVisible(visible);        if (d->eventLoop)            d->eventLoop->exit();    }}/*!\reimp */void QDialog::showEvent(QShowEvent *event){    if (!event->spontaneous() && !testAttribute(Qt::WA_Moved)) {	Qt::WindowStates  state = windowState();        adjustPosition(parentWidget());        setAttribute(Qt::WA_Moved, false); // not really an explicit position	if (state != windowState())	    setWindowState(state);    }}/*! \internal */void QDialog::adjustPosition(QWidget* w){    QPoint p(0, 0);    int extraw = 0, extrah = 0, scrn = 0;    if (w)        w = w->window();    QRect desk;    if (w) {        scrn = QApplication::desktop()->screenNumber(w);    } else if (QApplication::desktop()->isVirtualDesktop()) {        scrn = QApplication::desktop()->screenNumber(QCursor::pos());    } else {        scrn = QApplication::desktop()->screenNumber(this);    }    desk = QApplication::desktop()->availableGeometry(scrn);    QWidgetList list = QApplication::topLevelWidgets();    for (int i = 0; (extraw == 0 || extrah == 0) && i < list.size(); ++i) {        QWidget * current = list.at(i);        if (current->isVisible()) {            int framew = current->geometry().x() - current->x();            int frameh = current->geometry().y() - current->y();            extraw = qMax(extraw, framew);            extrah = qMax(extrah, frameh);        }    }    // sanity check for decoration frames. With embedding, we    // might get extraordinary values    if (extraw == 0 || extrah == 0 || extraw >= 10 || extrah >= 40) {        extrah = 40;        extraw = 10;    }#ifndef Q_OS_TEMP    if (w) {        // Use mapToGlobal rather than geometry() in case w might        // be embedded in another application        QPoint pp = w->mapToGlobal(QPoint(0,0));        p = QPoint(pp.x() + w->width()/2,                    pp.y() + w->height()/ 2);    } else {        // p = middle of the desktop        p = QPoint(desk.x() + desk.width()/2, desk.y() + desk.height()/2);    }#else    p = QPoint(desk.x() + desk.width()/2, desk.y() + desk.height()/2);#endif    // p = origin of this    p = QPoint(p.x()-width()/2 - extraw,                p.y()-height()/2 - extrah);    if (p.x() + extraw + width() > desk.x() + desk.width())        p.setX(desk.x() + desk.width() - width() - extraw);    if (p.x() < desk.x())        p.setX(desk.x());    if (p.y() + extrah + height() > desk.y() + desk.height())        p.setY(desk.y() + desk.height() - height() - extrah);    if (p.y() < desk.y())        p.setY(desk.y());    move(p);}/*!    If \a orientation is Qt::Horizontal, the extension will be displayed    to the right of the dialog's main area. If \a orientation is    Qt::Vertical, the extension will be displayed below the dialog's main    area.  \sa orientation(), setExtension()*/void QDialog::setOrientation(Qt::Orientation orientation){    Q_D(QDialog);    d->orientation = orientation;}/*!  Returns the dialog's extension orientation.  \sa setOrientation()*/Qt::Orientation QDialog::orientation() const{    Q_D(const QDialog);    return d->orientation;}/*!    Sets the widget, \a extension, to be the dialog's extension,    deleting any previous extension. The dialog takes ownership of the    extension. Note that if 0 is passed any existing extension will be    deleted.  This function must only be called while the dialog is hidden.  \sa showExtension(), setOrientation(), extension() */void QDialog::setExtension(QWidget* extension){    Q_D(QDialog);    delete d->extension;    d->extension = extension;    if (!extension)        return;    if (extension->parentWidget() != this)        extension->setParent(this);    extension->hide();}/*!  Returns the dialog's extension or 0 if no extension has been  defined.  \sa setExtension() */QWidget* QDialog::extension() const{    Q_D(const QDialog);    return d->extension;}/*!  If \a showIt is true, the dialog's extension is shown; otherwise the  extension is hidden.  This slot is usually connected to the \l QPushButton::toggled() signal  of a QPushButton.  A dialog with a visible extension is not resizeable.  \sa show(), setExtension(), setOrientation() */void QDialog::showExtension(bool showIt){    Q_D(QDialog);    d->doShowExtension = showIt;    if (!d->extension)        return;    if (!testAttribute(Qt::WA_WState_Visible))        return;    if (d->extension->isVisible() == showIt)        return;    if (showIt) {        d->size = size();        d->min = minimumSize();        d->max = maximumSize();        if (layout())            layout()->setEnabled(false);        QSize s(d->extension->sizeHint()                 .expandedTo(d->extension->minimumSize())                 .boundedTo(d->extension->maximumSize()));        if (d->orientation == Qt::Horizontal) {            int h = qMax(height(), s.height());            d->extension->setGeometry(width(), 0, s.width(), h);            setFixedSize(width() + s.width(), h);        } else {            int w = qMax(width(), s.width());            d->extension->setGeometry(0, height(), w, s.height());            setFixedSize(w, height() + s.height());        }        d->extension->show();    } else {        d->extension->hide();        // workaround for CDE window manager that won't shrink with (-1,-1)        setMinimumSize(d->min.expandedTo(QSize(1, 1)));        setMaximumSize(d->max);        resize(d->size);        if (layout())            layout()->setEnabled(true);    }}/*! \reimp */QSize QDialog::sizeHint() const{    Q_D(const QDialog);    if (d->extension)        if (d->orientation == Qt::Horizontal)            return QSize(QWidget::sizeHint().width(),                        qMax(QWidget::sizeHint().height(),d->extension->sizeHint().height()));        else            return QSize(qMax(QWidget::sizeHint().width(), d->extension->sizeHint().width()),                        QWidget::sizeHint().height());    return QWidget::sizeHint();}/*! \reimp */QSize QDialog::minimumSizeHint() const{    Q_D(const QDialog);    if (d->extension)        if (d->orientation == Qt::Horizontal)            return QSize(QWidget::minimumSizeHint().width(),                        qMax(QWidget::minimumSizeHint().height(), d->extension->minimumSizeHint().height()));        else            return QSize(qMax(QWidget::minimumSizeHint().width(), d->extension->minimumSizeHint().width()),                        QWidget::minimumSizeHint().height());    return QWidget::minimumSizeHint();}/*!    \property QDialog::modal    \brief whether show() should pop up the dialog as modal or modeless    By default, this property is false and show() pops up the dialog    as modeless. Setting his property to true is equivalent to setting    QWidget::windowModality to Qt::ApplicationModal.    exec() ignores the value of this property and always pops up the    dialog as modal.    \sa QWidget::windowModality, show(), exec()*/void QDialog::setModal(bool modal){    setAttribute(Qt::WA_ShowModal, modal);}bool QDialog::isSizeGripEnabled() const{#ifndef QT_NO_SIZEGRIP    Q_D(const QDialog);    return !!d->resizer;#else    return false;#endif}void QDialog::setSizeGripEnabled(bool enabled){#ifdef QT_NO_SIZEGRIP    Q_UNUSED(enabled);#else    Q_D(QDialog);    if (!enabled != !d->resizer) {        if (enabled) {            d->resizer = new QSizeGrip(this);            // adjustSize() processes all events, which is suboptimal            d->resizer->resize(d->resizer->sizeHint());            if (isRightToLeft())                d->resizer->move(rect().bottomLeft() -d->resizer->rect().bottomLeft());            else                d->resizer->move(rect().bottomRight() -d->resizer->rect().bottomRight());            d->resizer->lower();            d->resizer->show();        } else {            delete d->resizer;            d->resizer = 0;        }    }#endif //QT_NO_SIZEGRIP}/*! \reimp */void QDialog::resizeEvent(QResizeEvent *){#ifndef QT_NO_SIZEGRIP    Q_D(QDialog);    if (d->resizer) {        if (isRightToLeft())            d->resizer->move(rect().bottomLeft() -d->resizer->rect().bottomLeft());        else            d->resizer->move(rect().bottomRight() -d->resizer->rect().bottomRight());        d->resizer->lower();    }#endif}/*! \fn void QDialog::finished(int result)    \since 4.1    This signal is emitted when the dialog's \a result code has been    set, either by the user or by calling done(), accept(), or    reject().    Note that this signal is \e not emitted when hiding the dialog    with hide() or setVisible(false). This includes deleting the    dialog while it is visible.    \sa accepted(), rejected()*//*! \fn void QDialog::accepted()    \since 4.1    This signal is emitted when the dialog has been accepted either by    the user or by calling accept() or done() with the    QDialog::Accepted argument.    Note that this signal is \e not emitted when hiding the dialog    with hide() or setVisible(false). This includes deleting the    dialog while it is visible.    \sa finished(), rejected()*//*! \fn void QDialog::rejected()    \since 4.1    This signal is emitted when the dialog has been rejected either by    the user or by calling reject() or done() with the    QDialog::Rejected argument.    Note that this signal is \e not emitted when hiding the dialog    with hide() or setVisible(false). This includes deleting the    dialog while it is visible.    \sa finished(), accepted()*/

⌨️ 快捷键说明

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