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

📄 formwindow.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        popup->addAction(stackedWidget->actionNextPage());        popup->addAction(stackedWidget->actionPreviousPage());        if (stackedWidget->count() > 1) {            popup->addAction(stackedWidget->actionChangePageOrder());        }        popup->addSeparator();    } else if (qobject_cast<QDesignerToolBox*>(w)) {        QDesignerToolBox *toolBox = static_cast<QDesignerToolBox*>(w);        if (toolBox->count()) {            popup->addAction(toolBox->actionDeletePage());        }        QMenu *insertPageMenu = popup->addMenu(tr("Insert Page"));        insertPageMenu->addAction(toolBox->actionInsertPageAfter());        insertPageMenu->addAction(toolBox->actionInsertPage());        if (toolBox->count() > 1) {            popup->addAction(toolBox->actionChangePageOrder());        }        popup->addSeparator();    }    if (!isFormWindow) {        popup->addAction(manager->actionCut());        popup->addAction(manager->actionCopy());    }    popup->addAction(manager->actionPaste());    popup->addAction(manager->actionSelectAll());    if (!isFormWindow) {        popup->addAction(manager->actionDelete());    }    popup->addSeparator();    QMenu *menu = popup->addMenu(tr("Lay out"));    menu->addAction(manager->actionAdjustSize());    menu->addAction(manager->actionHorizontalLayout());    menu->addAction(manager->actionVerticalLayout());    menu->addAction(manager->actionGridLayout());    if (!isFormWindow) {        menu->addAction(manager->actionSplitHorizontal());        menu->addAction(manager->actionSplitVertical());    }    menu->addAction(manager->actionBreakLayout());    return popup;}void FormWindow::resizeEvent(QResizeEvent *e){/*    if (editMode() == TabOrderEditMode)        repositionOrderIndicators(); */    m_geometryChangedTimer->start(10);    QWidget::resizeEvent(e);}/*!  Maps \a pos in \a w's coordinates to the form's coordinate system.  This is the equivalent to mapFromGlobal(w->mapToGlobal(pos)) but  avoids the two roundtrips to the X-Server on Unix/X11. */QPoint FormWindow::mapToForm(const QWidget *w, const QPoint &pos) const{    QPoint p = pos;    const QWidget* i = w;    while (i && !i->isWindow() && !isMainContainer(i)) {        p = i->mapToParent(p);        i = i->parentWidget();    }    return mapFromGlobal(w->mapToGlobal(pos));}bool FormWindow::canBeBuddy(QWidget *w) const // ### rename me.{    if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), w)) {        int index = sheet->indexOf(QLatin1String("focusPolicy"));        if (index != -1) {            bool ok = false;            Qt::FocusPolicy q = (Qt::FocusPolicy) Utils::valueOf(sheet->property(index), &ok);            return ok && q != Qt::NoFocus;        }    }    return false;}QWidget *FormWindow::findContainer(QWidget *w, bool excludeLayout) const{    if (!isChildOf(w, this)        || const_cast<const QWidget *>(w) == this)        return 0;    QDesignerWidgetFactoryInterface *widgetFactory = core()->widgetFactory();    QDesignerWidgetDataBaseInterface *widgetDataBase = core()->widgetDataBase();    QDesignerMetaDataBaseInterface *metaDataBase = core()->metaDataBase();    QWidget *container = widgetFactory->containerOfWidget(mainContainer()); // default parent for new widget is the formwindow    if (!isMainContainer(w)) { // press was not on formwindow, check if we can find another parent        while (w) {            if (qobject_cast<InvisibleWidget*>(w) || !metaDataBase->item(w)) {                w = w->parentWidget();                continue;            }            bool isContainer = widgetDataBase->isContainer(w, true) || w == mainContainer();            if (!isContainer || (excludeLayout && qobject_cast<QLayoutWidget*>(w))) { // ### skip QSplitter                w = w->parentWidget();            } else {                container = w;                break;            }        }    }    return container;}void FormWindow::simplifySelection(QList<QWidget*> *sel) const{    // Figure out which widgets should be removed from selection.    // We want to remove those whose parent widget is also in the    // selection (because the child widgets are contained by    // their parent, they shouldn't be in the selection --    // they are "implicitly" selected)    QList<QWidget*> toBeRemoved;    QListIterator<QWidget*> it(*sel);    while (it.hasNext()) {        QWidget *child = it.next();        QWidget *w = child;        while (w->parentWidget() && sel->contains(w->parentWidget()))            w = w->parentWidget();        if (child != w)            toBeRemoved.append(child);    }    // Now we can actually remove the widgets that were marked    // for removal in the previous pass.    while (!toBeRemoved.isEmpty())        sel->removeAll(toBeRemoved.takeFirst());}FormWindow *FormWindow::findFormWindow(QWidget *w){    return qobject_cast<FormWindow*>(QDesignerFormWindowInterface::findFormWindow(w));}void FormWindow::repaintSelection(){    QList<QWidget*> sel = selectedWidgets();    foreach (QWidget *ww, sel)        repaintSelection(ww);}bool FormWindow::isDirty() const{    return m_dirty;}void FormWindow::setDirty(bool dirty){    m_dirty = dirty;    if (!m_dirty)        m_lastIndex = m_commandHistory->currentIndex();}void FormWindow::updateDirty(){    m_dirty = m_commandHistory->currentIndex() != m_lastIndex;}QWidget *FormWindow::containerAt(const QPoint &pos){    QWidget *widget = widgetAt(pos);    return findContainer(widget, true);}static QWidget *childAt_SkipDropLine(QWidget *w, QPoint pos){    QObjectList child_list = w->children();    for (int i = child_list.size() - 1; i >= 0; --i) {        QObject *child_obj = child_list[i];        if (!child_obj->isWidgetType())            continue;        if (qobject_cast<WidgetHandle*>(child_obj) != 0)            continue;        QWidget *child = static_cast<QWidget*>(child_obj);        if (!child->geometry().contains(pos))            continue;        pos = child->mapFromParent(pos);        QWidget *res = childAt_SkipDropLine(child, pos);        if (res == 0)            return child;        else            return res;    }    return 0;}QWidget *FormWindow::widgetAt(const QPoint &pos){    QWidget *w = childAt(pos);    if (qobject_cast<WidgetHandle*>(w) != 0)        w = childAt_SkipDropLine(this, pos);    return w == 0 ? this : w;}void FormWindow::highlightWidget(QWidget *widget, const QPoint &pos, HighlightMode mode){    Q_ASSERT(widget);    QWidget *container = findContainer(widget, false);    Q_ASSERT(!qobject_cast<ConnectionEdit*>(widget));    if (container == 0 || core()->metaDataBase()->item(container) == 0)        return;    if (QDesignerActionProviderExtension *g = qt_extension<QDesignerActionProviderExtension*>(core()->extensionManager(), container)) {        if (mode == Restore) {            g->adjustIndicator(QPoint());        } else {            QPoint pt = widget->mapTo(container, pos);            g->adjustIndicator(pt);        }    } else if (QDesignerLayoutDecorationExtension *g = qt_extension<QDesignerLayoutDecorationExtension*>(core()->extensionManager(), container)) {        if (mode == Restore) {            g->adjustIndicator(QPoint(), -1);        } else {            QPoint pt = widget->mapTo(container, pos);            int index = g->findItemAt(pt);            g->adjustIndicator(pt, index);        }    }    QMainWindow *mw = qobject_cast<QMainWindow*>(mainContainer());    if (container == mainContainer() || (mw && mw->centralWidget() && mw->centralWidget() == container))        return;    if (mode == Restore) {        QPair<QPalette, bool> paletteAndFill = palettesBeforeHighlight.take(container);        container->setPalette(paletteAndFill.first);        container->setAutoFillBackground(paletteAndFill.second);    } else {        QPalette p = container->palette();        if (!palettesBeforeHighlight.contains(container)) {            QPair<QPalette, bool> paletteAndFill;            if (container->testAttribute(Qt::WA_SetPalette))                paletteAndFill.first = p;            paletteAndFill.second = container->autoFillBackground();            palettesBeforeHighlight[container] = paletteAndFill;        }        p.setColor(backgroundRole(), p.midlight().color());        container->setPalette(p);        container->setAutoFillBackground(true);    }}QList<QWidget *> FormWindow::widgets(QWidget *widget) const{    QList<QWidget *> l;    foreach (QObject *o, widget->children()) {        QWidget *w = qobject_cast<QWidget*>(o);        if (w && isManaged(w))            l.append(w);    }    return l;}int FormWindow::toolCount() const{    return m_widgetStack->count();}QDesignerFormWindowToolInterface *FormWindow::tool(int index) const{    return m_widgetStack->tool(index);}void FormWindow::registerTool(QDesignerFormWindowToolInterface *tool){    Q_ASSERT(tool != 0);    m_widgetStack->addTool(tool);    if (m_mainContainer)        m_mainContainer->update();}void FormWindow::setCurrentTool(int index){    m_widgetStack->setCurrentTool(index);}int FormWindow::currentTool() const{    return m_widgetStack->currentIndex();}bool FormWindow::handleEvent(QWidget *widget, QWidget *managedWidget, QEvent *event){    if (m_widgetStack == 0)        return false;    QDesignerFormWindowToolInterface *tool = m_widgetStack->currentTool();    if (tool == 0)        return false;    return tool->handleEvent(widget, managedWidget, event);}void FormWindow::initializeCoreTools(){    m_widgetEditor = new WidgetEditorTool(this);    registerTool(m_widgetEditor);}void FormWindow::checkSelection(){    m_checkSelectionTimer->start(0);}void FormWindow::checkSelectionNow(){    m_checkSelectionTimer->stop();    foreach (QWidget *widget, selectedWidgets()) {        updateSelection(widget);        if (LayoutInfo::layoutType(core(), widget) != LayoutInfo::NoLayout)            updateChildSelections(widget);    }}QString FormWindow::author() const{    return m_author;}QString FormWindow::comment() const{     return m_comment;}void FormWindow::setAuthor(const QString &author){    m_author = author;}void FormWindow::setComment(const QString &comment){    m_comment = comment;}void FormWindow::editWidgets(){    m_widgetEditor->action()->trigger();}QStringList FormWindow::resourceFiles() const{    return m_resourceFiles;}void FormWindow::addResourceFile(const QString &path){    if (!m_resourceFiles.contains(path)) {        m_resourceFiles.append(path);        setDirty(true);        emit resourceFilesChanged();    }}void FormWindow::removeResourceFile(const QString &path){    if (m_resourceFiles.removeAll(path) > 0) {        setDirty(true);        emit resourceFilesChanged();    }}bool FormWindow::blockSelectionChanged(bool b){    bool blocked = m_blockSelectionChanged;    m_blockSelectionChanged = b;    return blocked;}void FormWindow::editContents(){    QList<QWidget*> sel = selectedWidgets();    if (sel.count() == 1) {        QWidget *widget = sel.first();        if (QDesignerTaskMenuExtension *taskMenu = qt_extension<QDesignerTaskMenuExtension*>(core()->extensionManager(), widget)) {            if (QAction *a = taskMenu->preferredEditAction()) {                a->trigger();            }        }    }}void FormWindow::dropWidgets(QList<QDesignerDnDItemInterface*> &item_list, QWidget *target,                                const QPoint &global_mouse_pos){    beginCommand(tr("Drop widget"));    QWidget *parent = target;    if (parent == 0)        parent = mainContainer();    // You can only drop stuff onto the central widget of a QMainWindow    // ### generalize to use container extension    if (QMainWindow *main_win = qobject_cast<QMainWindow*>(target)) {        QPoint main_win_pos = main_win->mapFromGlobal(global_mouse_pos);        QRect central_wgt_geo = main_win->centralWidget()->geometry();        if (!central_wgt_geo.contains(main_win_pos)) {            foreach (QDesignerDnDItemInterface *item, item_list) {                if (item->widget() != 0)                    item->widget()->show();            }            return;        }    }    core()->formWindowManager()->setActiveFormWindow(this);    mainContainer()->activateWindow();    clearSelection(false);    highlightWidget(target, target->mapFromGlobal(global_mouse_pos), FormWindow::Restore);    foreach (QDesignerDnDItemInterface *item, item_list) {        DomUI *dom_ui = item->domUi();        QRect geometry = item->decoration()->geometry();        Q_ASSERT(dom_ui != 0);        if (item->type() == QDesignerDnDItemInterface::CopyDrop) {            QWidget *widget = createWidget(dom_ui, geometry, parent);            if (!widget)                return;            selectWidget(widget, true);            widget->setFocus(Qt::MouseFocusReason); // ### workaround for QWorkSpace (?) bug        } else {            QWidget *widget = item->widget();            Q_ASSERT(widget != 0);            QDesignerFormWindowInterface *dest = findFormWindow(widget);            QWidget *container = findContainer(parent, false);            QDesignerLayoutDecorationExtension *deco = qt_extension<QDesignerLayoutDecorationExtension*>(core()->extensionManager(), container);            if (dest == this) {                if (deco == 0) {                    parent = container;                    if (parent != widget->parent()) {                        ReparentWidgetCommand *cmd = new ReparentWidgetCommand(dest);                        cmd->init(widget, parent);                        commandHistory()->push(cmd);                    }                    geometry.moveTopLeft(parent->mapFromGlobal(geometry.topLeft()));                    resizeWidget(widget, geometry);                    selectWidget(widget, true);                    widget->show();                } else {                    insertWidget(widget, geometry, container, true);                }            } else {                FormWindow *source = qobject_cast<FormWindow*>(item->source());                Q_ASSERT(source != 0);                source->deleteWidgets(QList<QWidget*>() << widget);                QWidget *new_widget = createWidget(dom_ui, geometry, parent);                selectWidget(new_widget, true);            }        }    }    endCommand();}QDir FormWindow::absoluteDir() const{    if (fileName().isEmpty())        return QDir::current();    return QFileInfo(fileName()).absoluteDir();}void FormWindow::layoutDefault(int *margin, int *spacing){    *margin = m_defaultMargin;    *spacing = m_defaultSpacing;}void FormWindow::setLayoutDefault(int margin, int spacing){    m_defaultMargin = margin;    m_defaultSpacing = spacing;}void FormWindow::layoutFunction(QString *margin, QString *spacing){    *margin = m_marginFunction;    *spacing = m_spacingFunction;}void FormWindow::setLayoutFunction(const QString &margin, const QString &spacing){    m_marginFunction = margin;    m_spacingFunction = spacing;}QString FormWindow::pixmapFunction() const{    return m_pixmapFunction;}void FormWindow::setPixmapFunction(const QString &pixmapFunction){    m_pixmapFunction = pixmapFunction;}QStringList FormWindow::includeHints() const{    return m_includeHints;}void FormWindow::setIncludeHints(const QStringList &includeHints){    m_includeHints = includeHints;}QString FormWindow::exportMacro() const{    return m_exportMacro;}void FormWindow::setExportMacro(const QString &exportMacro){    m_exportMacro = exportMacro;}} // namespace

⌨️ 快捷键说明

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