📄 qdesigner_workbench.cpp
字号:
foreach (QDesignerToolWindow *tw, m_toolWindows) { QDockWidget *dockWidget = magicalDockWidget(tw); tw->setVisible(true); dockWidget->setVisible(m_visibilities.value(tw, true)); } mw->restoreState(settings.mainWindowState(), 2); foreach (QDesignerFormWindow *fw, m_formWindows) m_workspace->addWindow(fw, magicalWindowFlags(fw))->hide(); // will be shown in adjustFormPositions changeBringToFrontVisiblity(false); mw->show(); if (!m_initializing) QMetaObject::invokeMethod(this, "adjustFormPositions", Qt::QueuedConnection);}bool QDesignerWorkbench::eventFilter(QObject *object, QEvent *event){ if (object == m_workspace) { if (event->type() == QEvent::DragEnter) { QDragEnterEvent *e = static_cast<QDragEnterEvent*>(event); if (e->mimeData()->hasFormat("text/uri-list")) { e->acceptProposedAction(); return true; } } else if (event->type() == QEvent::Drop) { QDropEvent *e = static_cast<QDropEvent*>(event); if (!e->mimeData()->hasFormat("text/uri-list")) return false; foreach (QUrl url, e->mimeData()->urls()) { QString fileName = url.toLocalFile(); if (fileName.endsWith(".ui")) readInForm(url.toLocalFile()); else QMessageBox::critical(m_workspace, tr("Opening Form"), tr("Cannot open file %1!").arg(fileName)); } e->acceptProposedAction(); return true; } } return false;}void QDesignerWorkbench::adjustFormPositions(){ if (m_workspace == 0) return; QPoint workspace_tl = m_workspace->mapToGlobal(QPoint(0, 0)); foreach (QDesignerFormWindow *fw, m_formWindows) { QWidget *frame = fw->parentWidget(); if (frame == 0) continue; QRect g = m_geometries.value(fw, fw->geometryHint()); frame->move(g.topLeft() - workspace_tl); fw->resize(g.size()); frame->show(); }}void QDesignerWorkbench::changeBringToFrontVisiblity(bool visible){ QAction *btf = m_actionManager->bringToFrontAction(); QList<QAction *> actionList = m_actionManager->windowActions()->actions(); btf->setVisible(visible); QAction *sep = actionList.at(actionList.indexOf(btf) - 1); if (sep->isSeparator()) sep->setVisible(visible);}void QDesignerWorkbench::switchToTopLevelMode(){ if (m_mode == TopLevelMode) return; // make sure that the widgetbox is visible iff it is different from neutrol. if (m_mode != NeutralMode) { if (QDesignerToolWindow *widgetbox_tool = findToolWindow(core()->widgetBox())) { if (!widgetbox_tool->action()->isChecked()) widgetbox_tool->action()->trigger(); } } switchToNeutralMode(); QPoint desktopOffset = QApplication::desktop()->availableGeometry().topLeft(); m_mode = TopLevelMode; // The widget box is special, it gets the menubar and gets to be the main widget. QDesignerToolWindow *widgetBoxWrapper = 0; if (0 != (widgetBoxWrapper = findToolWindow(core()->widgetBox()))) { m_core->setTopLevel(widgetBoxWrapper);#ifndef Q_WS_MAC widgetBoxWrapper->setMenuBar(m_globalMenuBar); widgetBoxWrapper->action()->setEnabled(false); widgetBoxWrapper->setSaveSettingsOnClose(true); qDesigner->setMainWindow(widgetBoxWrapper); widgetBoxWrapper->setWindowTitle(tr("Qt Designer"));#endif widgetBoxWrapper->addToolBar(m_editToolBar); widgetBoxWrapper->addToolBar(m_toolToolBar); widgetBoxWrapper->addToolBar(m_formToolBar); widgetBoxWrapper->insertToolBarBreak(m_formToolBar); } QDesignerSettings settings; bool found_visible_window = false; foreach (QDesignerToolWindow *tw, m_toolWindows) { tw->setParent(magicalParent(), magicalWindowFlags(tw)); settings.setGeometryFor(tw, tw->geometryHint()); tw->action()->setChecked(tw->isVisible()); found_visible_window |= tw->isVisible(); } if (!m_toolWindows.isEmpty() && !found_visible_window) m_toolWindows.first()->show(); changeBringToFrontVisiblity(true); foreach (QDesignerFormWindow *fw, m_formWindows) { fw->setParent(magicalParent(), magicalWindowFlags(fw)); QRect g = m_geometries.value(fw, fw->geometryHint()); fw->resize(g.size()); fw->move(g.topLeft() + desktopOffset); fw->show(); }}QDesignerFormWindow *QDesignerWorkbench::createFormWindow(){ QDesignerFormWindow *formWindow = new QDesignerFormWindow(/*formWindow=*/ 0, this); if (m_workspace) { m_workspace->addWindow(formWindow, magicalWindowFlags(formWindow)); } else { formWindow->setParent(magicalParent(), magicalWindowFlags(formWindow)); } formWindow->setAttribute(Qt::WA_DeleteOnClose, true); addFormWindow(formWindow); QRect g = formWindow->geometryHint(); formWindow->resize(g.size()); formWindow->move(availableGeometry().center() - g.center()); if (m_workspace) { m_workspace->setActiveWindow(formWindow); } return formWindow;}QDesignerFormWindowManagerInterface *QDesignerWorkbench::formWindowManager() const{ return m_core->formWindowManager();}QDesignerFormEditorInterface *QDesignerWorkbench::core() const{ return m_core;}int QDesignerWorkbench::toolWindowCount() const{ return m_toolWindows.count();}QDesignerToolWindow *QDesignerWorkbench::toolWindow(int index) const{ return m_toolWindows.at(index);}int QDesignerWorkbench::formWindowCount() const{ return m_formWindows.count();}QDesignerFormWindow *QDesignerWorkbench::formWindow(int index) const{ return m_formWindows.at(index);}QRect QDesignerWorkbench::availableGeometry() const{ if (m_workspace) return m_workspace->geometry(); QDesktopWidget *desktop = qDesigner->desktop(); QWidget *window = findToolWindow(core()->widgetBox()); if (window) return desktop->availableGeometry(desktop->screenNumber(window)); return desktop->availableGeometry(0);}int QDesignerWorkbench::marginHint() const{ return 20;}void QDesignerWorkbench::activateWorkspaceChildWindow(QWidget *widget){ if (QDesignerFormWindow *fw = qobject_cast<QDesignerFormWindow*>(widget)) { core()->formWindowManager()->setActiveFormWindow(fw->editor()); m_workspace->setActiveWindow(widget); }}void QDesignerWorkbench::removeToolWindow(QDesignerToolWindow *toolWindow){ int index = m_toolWindows.indexOf(toolWindow); if (index != -1) { m_toolWindows.removeAt(index); m_toolWindowExtras.remove(toolWindow); } if (QAction *action = toolWindow->action()) { m_toolActions->removeAction(action); m_toolMenu->removeAction(action); }}void QDesignerWorkbench::removeFormWindow(QDesignerFormWindow *formWindow){ int index = m_formWindows.indexOf(formWindow); if (index != -1) { m_formWindows.removeAt(index); m_formWindowExtras.remove(formWindow); } if (QAction *action = formWindow->action()) { m_windowActions->removeAction(action); m_windowMenu->removeAction(action); } if (formWindowCount() == 0) { m_actionManager->minimizeAction()->setEnabled(false); QList<QAction *> actions = m_windowMenu->actions(); for (int i = actions.size() - 1; i >= 0; --i) { QAction *act = actions.at(i); if (act->isSeparator()) { delete act; break; } } }}void QDesignerWorkbench::initializeCorePlugins(){ QList<QObject*> plugins = QPluginLoader::staticInstances(); plugins += core()->pluginManager()->instances(); foreach (QObject *plugin, plugins) { if (QDesignerFormEditorPluginInterface *formEditorPlugin = qobject_cast<QDesignerFormEditorPluginInterface*>(plugin)) { if (!formEditorPlugin->isInitialized()) formEditorPlugin->initialize(core()); } }}void QDesignerWorkbench::saveSettings() const{ QDesignerSettings settings; if (m_mode == DockedMode) { if (qFindChild<QWorkspace *>(qDesigner->mainWindow())) { settings.saveGeometryFor(qDesigner->mainWindow()); settings.setValue(qDesigner->mainWindow()->objectName() + QLatin1String("/visible"), false); } } else { foreach (QDesignerToolWindow *tw, m_toolWindows) { settings.saveGeometryFor(tw); } }}bool QDesignerWorkbench::readInForm(const QString &fileName) const{ return m_actionManager->readInForm(fileName);}bool QDesignerWorkbench::writeOutForm(QDesignerFormWindowInterface *formWindow, const QString &fileName) const{ return m_actionManager->writeOutForm(formWindow, fileName);}bool QDesignerWorkbench::saveForm(QDesignerFormWindowInterface *frm){ return m_actionManager->saveForm(frm);}QDesignerToolWindow *QDesignerWorkbench::findToolWindow(QWidget *widget) const{ foreach (QDesignerToolWindow *toolWindow, m_toolWindows) { if (toolWindow->centralWidget() == widget) return toolWindow; } return 0;}QDesignerFormWindow *QDesignerWorkbench::findFormWindow(QWidget *widget) const{ foreach (QDesignerFormWindow *formWindow, m_formWindows) { if (formWindow->centralWidget() == widget) return formWindow; } return 0;}bool QDesignerWorkbench::handleClose(){ QList<QDesignerFormWindow *> dirtyForms; foreach (QDesignerFormWindow *w, m_formWindows) { if (w->editor()->isDirty()) dirtyForms << w; } if (dirtyForms.size()) { if (dirtyForms.size() == 1) { if (!dirtyForms.at(0)->close()) { return false; } } else { QMessageBox box(tr("Save Forms?"), tr("There are %1 forms with unsaved changes." " Do you want to review these changes before quitting?") .arg(dirtyForms.size()), QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape, 0); box.setButtonText(QMessageBox::Yes, tr("Review Changes")); box.setButtonText(QMessageBox::No, tr("Discard Changes")); switch (box.exec()) { case QMessageBox::Cancel: return false; case QMessageBox::Yes: foreach (QDesignerFormWindow *fw, dirtyForms) { fw->show(); fw->raise(); if (!fw->close()) { return false; } } break; case QMessageBox::No: foreach (QDesignerFormWindow *fw, dirtyForms) { fw->editor()->setDirty(false); fw->setWindowModified(false); } break; } } } foreach (QDesignerFormWindow *fw, m_formWindows) fw->close(); saveSettings(); return true;}QDesignerActions *QDesignerWorkbench::actionManager() const{ return m_actionManager;}void QDesignerWorkbench::setUIMode(UIMode mode){ switch (mode) { case TopLevelMode: switchToTopLevelMode(); break; case DockedMode: switchToDockedMode(); break; default: Q_ASSERT(0); }}void QDesignerWorkbench::updateWindowMenu(QDesignerFormWindowInterface *fw){ if (!fw) return; if (QDesignerFormWindow *dfw = qobject_cast<QDesignerFormWindow *>(fw->parentWidget())) dfw->action()->setChecked(true);}void QDesignerWorkbench::formWindowActionTriggered(QAction *a){ QWidget *widget = a->parentWidget(); Q_ASSERT(widget != 0); if (m_mode == DockedMode) { m_workspace->setActiveWindow(widget); } else { widget->setWindowState(widget->windowState() & ~Qt::WindowMinimized); widget->activateWindow(); widget->raise(); }}void QDesignerWorkbench::showToolBars(){ m_toolToolBar->show(); m_formToolBar->show(); m_editToolBar->show();}void QDesignerWorkbench::closeAllToolWindows(){ foreach (QDesignerToolWindow *tw, m_toolWindows) tw->hide();}QDockWidget *QDesignerWorkbench::magicalDockWidget(QWidget *widget) const{ if (!m_workspace) return 0; QDockWidget *dockWidget = qFindChild<QDockWidget*>(m_workspace->window(), widget->objectName() + QLatin1String("_dock")); return dockWidget;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -