📄 formwindow.cpp
字号:
cmd->init(widgets, core()->widgetFactory()->widgetOfContainer(w)); return cmd;}void FormWindow::breakLayout(){ QWidget *w = currentWidget() ? currentWidget() : mainContainer(); if (LayoutInfo::layoutType(m_core, w) != LayoutInfo::NoLayout || w->parentWidget() && LayoutInfo::layoutType(m_core, w->parentWidget()) != LayoutInfo::NoLayout) { breakLayout(w); return; } else { QList<QWidget*> widgets = selectedWidgets(); QListIterator<QWidget*> it(widgets); while (it.hasNext()) { QWidget *w = it.next(); if (LayoutInfo::layoutType(m_core, w) != LayoutInfo::NoLayout || w->parentWidget() && LayoutInfo::layoutType(m_core, w->parentWidget()) != LayoutInfo::NoLayout) break; } if (w) { breakLayout(w); return; } } w = mainContainer(); if (LayoutInfo::layoutType(m_core, w) != LayoutInfo::NoLayout || w->parentWidget() && LayoutInfo::layoutType(m_core, w->parentWidget()) != LayoutInfo::NoLayout) breakLayout(w);}void FormWindow::beginCommand(const QString &description){ m_commandHistory->beginMacro(description);}void FormWindow::endCommand(){ m_commandHistory->endMacro();}void FormWindow::raiseWidgets(){ QList<QWidget*> widgets = selectedWidgets(); simplifySelection(&widgets); foreach (QWidget *widget, widgets) { widget->raise(); }}void FormWindow::lowerWidgets(){ QList<QWidget*> widgets = selectedWidgets(); simplifySelection(&widgets); foreach (QWidget *widget, widgets) { widget->lower(); }}bool FormWindow::handleMouseButtonDblClickEvent(QWidget *, QWidget *managedWidget, QMouseEvent *e){ e->accept(); clearSelection(false); selectWidget(managedWidget); emit activated(managedWidget); return true;}void FormWindow::finishContextMenu(QWidget *w, QWidget *, QContextMenuEvent *e){ e->accept(); QDesignerTaskMenuExtension *taskMenu = qt_extension<QDesignerTaskMenuExtension*>(core()->extensionManager(), w); QMenu *menu = createPopupMenu(w); if (menu && taskMenu) { QList<QAction *> acts = taskMenu->taskActions(); if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(w)) { QDesignerTaskMenuExtension *baseTaskMenu = qt_extension<QDesignerTaskMenuExtension*>(core()->extensionManager(), promoted->child()); if (baseTaskMenu) { // "inherit" proper actions from base class's task menu QList<QAction *> baseActs = baseTaskMenu->taskActions(); QList<QAction *>::iterator it; for (it = baseActs.begin(); it != baseActs.end(); ) { // special case: don't want the "Promote to custom widget" action if ((*it)->objectName() == QLatin1String("__qt__promoteToCustomWidgetAction")) { it = baseActs.erase(it); continue; } // inherit the action only if it is not "reimplemented" // by the promoted widget's task menu QList<QAction *>::iterator it2; bool inherit = true; for (it2 = acts.begin(); it2 != acts.end(); ++it2) { if ((*it)->text() == (*it2)->text()) { inherit = false; break; } } if (inherit) ++it; else it = baseActs.erase(it); } if (!baseActs.isEmpty()) { // prepend the inherited actions to the action list QAction *sep = new QAction(menu); sep->setSeparator(true); baseActs.append(sep); for (int i = 0; i < baseActs.size(); ++i) acts.insert(i, baseActs.at(i)); } } } QAction *sep = new QAction(menu); sep->setSeparator(true); acts.append(sep); menu->insertActions(menu->actions().at(0), acts); } if (menu) { emit contextMenuRequested(menu, w); menu->exec(e->globalPos()); delete menu; }}bool FormWindow::handleContextMenu(QWidget *, QWidget *managedWidget, QContextMenuEvent *e){ e->accept(); bool selected = isWidgetSelected(managedWidget); if (selected == false) { clearSelection(false); selectWidget(managedWidget); raiseChildSelections(managedWidget); // raise selections and select widget QMetaObject::invokeMethod(core()->formWindowManager(), "slotUpdateActions"); } if (!isMainContainer(managedWidget)) { // press on a child widget // if widget is laid out, find the first non-laid out super-widget QWidget *realWidget = managedWidget; // but store the original one QMainWindow *mw = qobject_cast<QMainWindow*>(mainContainer()); if (mw && mw->centralWidget() == realWidget) { finishContextMenu(managedWidget, this, e); } else { finishContextMenu(realWidget, realWidget, e); } } else { finishContextMenu(mainContainer(), mainContainer(), e); } return true;}void FormWindow::setContents(QIODevice *dev){ bool saved = updatesEnabled(); setUpdatesEnabled(false); clearSelection(); if (mainContainer()) { core()->metaDataBase()->remove(mainContainer()); delete mainContainer(); m_mainContainer = 0; } m_insertedWidgets.clear(); m_widgets.clear(); emit changed(); QDesignerResource r(this); QWidget *w = r.load(dev, this); if (w == 0) { setFileName(QString()); w = core()->widgetFactory()->createWidget(QLatin1String("QWidget"), this); w->resize(400, 300); } setMainContainer(w); setUpdatesEnabled(saved);}void FormWindow::setContents(const QString &contents){ QByteArray data = contents.toUtf8(); QBuffer b(&data); if (b.open(QIODevice::ReadOnly)) setContents(&b);}void FormWindow::layoutHorizontalContainer(QWidget *w){ if (w == this) w = mainContainer(); w = core()->widgetFactory()->containerOfWidget(w); QList<QObject*> l = w->children(); if (l.isEmpty()) return; QList<QWidget*> widgets; QListIterator<QObject*> it(l); while (it.hasNext()) { QObject* o = it.next(); if (!o->isWidgetType()) continue; QWidget *widget = static_cast<QWidget*>(o); if (widget->isVisibleTo(this) && isManaged(widget)) widgets.append(widget); } LayoutCommand *cmd = new LayoutCommand(this); cmd->init(mainContainer(), widgets, LayoutInfo::HBox, w); clearSelection(false); commandHistory()->push(cmd);}void FormWindow::layoutVerticalContainer(QWidget *w){ if (w == this) w = mainContainer(); w = core()->widgetFactory()->containerOfWidget(w); QList<QObject*> l = w->children(); if (l.isEmpty()) return; QListIterator<QObject*> it(l); QList<QWidget*> widgets; while (it.hasNext()) { QObject* o = it.next(); if (!o->isWidgetType()) continue; QWidget *widget = static_cast<QWidget*>(o); if (widget->isVisibleTo(this) && isManaged(widget)) widgets.append(widget); } LayoutCommand *cmd = new LayoutCommand(this); cmd->init(mainContainer(), widgets, LayoutInfo::VBox, w); clearSelection(false); commandHistory()->push(cmd);}void FormWindow::layoutGridContainer(QWidget *w){ if (w == this) w = mainContainer(); w = core()->widgetFactory()->containerOfWidget(w); QList<QObject*> l = w->children(); if (l.isEmpty()) return; QList<QWidget*> widgets; QListIterator<QObject*> it(l); while (it.hasNext()) { QObject* o = it.next(); if (!o->isWidgetType()) continue; QWidget *widget = static_cast<QWidget*>(o); if (widget->isVisibleTo(this) && isManaged(widget)) widgets.append(widget); } LayoutCommand *cmd = new LayoutCommand(this); cmd->init(mainContainer(), widgets, LayoutInfo::Grid, w); clearSelection(false); commandHistory()->push(cmd);}bool FormWindow::hasInsertedChildren(QWidget *widget) const // ### move{ if (QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(core()->extensionManager(), widget)) { widget = container->widget(container->currentIndex()); } QList<QWidget*> l = widgets(widget); foreach (QWidget *child, l) { if (isManaged(child) && !LayoutInfo::isWidgetLaidout(core(), child) && child->isVisibleTo(const_cast<FormWindow*>(this))) return true; } return false;}void FormWindow::layoutHorizontalSplit(){ LayoutCommand *cmd = new LayoutCommand(this); cmd->init(mainContainer(), selectedWidgets(), LayoutInfo::HBox, /*layoutBase=*/ 0, /*splitter=*/ true); clearSelection(false); commandHistory()->push(cmd);}void FormWindow::layoutVerticalSplit(){ LayoutCommand *cmd = new LayoutCommand(this); cmd->init(mainContainer(), selectedWidgets(), LayoutInfo::VBox, /*layoutBase=*/ 0, /*splitter=*/ true); clearSelection(false); commandHistory()->push(cmd);}QMenu *FormWindow::createPopupMenu(QWidget *w){ QDesignerFormWindowManagerInterface *manager = core()->formWindowManager(); bool isFormWindow = qobject_cast<FormWindow*>(w); QMenu *popup = new QMenu(this); if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(w)) w = promoted->child(); if (qobject_cast<QDesignerTabWidget*>(w)) { QDesignerTabWidget *tabWidget = static_cast<QDesignerTabWidget*>(w); if (tabWidget->count()) { popup->addAction(tabWidget->actionDeletePage()); } QMenu *insertPageMenu = popup->addMenu(tr("Insert Page")); insertPageMenu->addAction(tabWidget->actionInsertPageAfter()); insertPageMenu->addAction(tabWidget->actionInsertPage()); popup->addSeparator(); } else if (qobject_cast<QDesignerStackedWidget*>(w)) { QDesignerStackedWidget *stackedWidget = static_cast<QDesignerStackedWidget*>(w); if (stackedWidget->count()) { popup->addAction(stackedWidget->actionDeletePage()); } QMenu *insertPageMenu = popup->addMenu(tr("Insert Page")); insertPageMenu->addAction(stackedWidget->actionInsertPageAfter()); insertPageMenu->addAction(stackedWidget->actionInsertPage()); 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -