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

📄 qdesigner_menubar.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }}void QDesignerMenuBar::leaveEditMode(LeaveEditMode mode){    m_editor->releaseKeyboard();    if (mode == Default)        return;    if (m_editor->text().isEmpty())        return;    QAction *action = 0;    if (m_currentIndex >= 0 && m_currentIndex < realActionCount()) {        action = safeActionAt(m_currentIndex);        formWindow()->beginCommand(QLatin1String("Change Title"));    } else {        Q_ASSERT(formWindow() != 0);        formWindow()->beginCommand(QLatin1String("Insert Menu"));        QString niceObjectName = ActionEditor::actionTextToName(m_editor->text());        if (niceObjectName.startsWith("action"))            niceObjectName.replace(0, 6, QLatin1String("menu"));        action = createAction(niceObjectName);        InsertActionIntoCommand *cmd = new InsertActionIntoCommand(formWindow());        cmd->init(this, action, m_addMenu);        formWindow()->commandHistory()->push(cmd);    }    SetPropertyCommand *cmd = new SetPropertyCommand(formWindow());    cmd->init(action, QLatin1String("text"), m_editor->text());    formWindow()->commandHistory()->push(cmd);    formWindow()->endCommand();    //moveDown();}void QDesignerMenuBar::showLineEdit(){    QAction *action = 0;    if (m_currentIndex >= 0 && m_currentIndex < realActionCount())        action = safeActionAt(m_currentIndex);    else        action = m_addMenu;    if (action->isSeparator())        return;    // hideMenu();    m_lastFocusWidget = qApp->focusWidget();    // open edit field for item name    QString text = action != m_addMenu ? action->text() : QString();    m_editor->setText(text);    m_editor->selectAll();    m_editor->setGeometry(actionGeometry(action));    m_editor->show();    qApp->setActiveWindow(m_editor);    m_editor->setFocus();    m_editor->grabKeyboard();}bool QDesignerMenuBar::eventFilter(QObject *object, QEvent *event){    if (object != this && object != m_editor)        return false;    if (!m_editor->isHidden() && object == m_editor && event->type() == QEvent::FocusOut) {        leaveEditMode(Default);        m_editor->hide();        update();        return true;    }    bool dispatch = true;    switch (event->type()) {        default: break;        case QEvent::KeyPress:        case QEvent::KeyRelease:        case QEvent::ContextMenu:        case QEvent::MouseMove:        case QEvent::MouseButtonPress:        case QEvent::MouseButtonRelease:        case QEvent::MouseButtonDblClick:            dispatch = (object != m_editor);            // no break        case QEvent::Enter:        case QEvent::Leave:        case QEvent::FocusIn:        case QEvent::FocusOut:        {            QWidget *widget = qobject_cast<QWidget*>(object);            if (dispatch && widget && (widget == this || isAncestorOf(widget)))                return handleEvent(widget, event);        } break;        case QEvent::Shortcut:            event->accept();            return true;    }    return false;};int QDesignerMenuBar::actionAtPosition(const QPoint &pos) const{    QList<QAction*> lst = actions();    int index = 0;    for (; index<lst.count(); ++index) {        QRect g = actionGeometry(lst.at(index));        g.setTopLeft(QPoint(0, 0));        if (g.contains(pos))            return index;    }    return -1;}int QDesignerMenuBar::findAction(const QPoint &pos) const{    int index = actionAtPosition(pos);    if (index == -1)        return realActionCount();    return index;}void QDesignerMenuBar::adjustIndicator(const QPoint &pos){    int index = findAction(pos);    QAction *action = safeActionAt(index);    Q_ASSERT(action != 0);    if (pos != QPoint(-1, -1)) {        QDesignerMenu *m = qobject_cast<QDesignerMenu*>(action->menu());        if (!m || m->parentMenu()) {            m_currentIndex = index;            showMenu(index);        }    }    if (QDesignerActionProviderExtension *a = actionProvider()) {        a->adjustIndicator(pos);    }}QAction *QDesignerMenuBar::actionMimeData(const QMimeData *mimeData) const{    if (const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(mimeData)) {        Q_ASSERT(!d->items.isEmpty());        return d->items.first();    }    return 0;}bool QDesignerMenuBar::checkAction(QAction *action) const{    if (!action || !action->menu())        return false; // no menu action!! nothing to do    QDesignerMenu *m = qobject_cast<QDesignerMenu*>(action->menu());    if (m && m->parentMenu())        return false; // it looks like a submenu    if (actions().contains(action))        return false; // we already have the action in the menubar    if (!Utils::isObjectAncestorOf(formWindow()->mainContainer(), action))        return false; // action belongs to another form    return true;}void QDesignerMenuBar::dragEnterEvent(QDragEnterEvent *event){    QAction *action = actionMimeData(event->mimeData());    if (!action || !Utils::isObjectAncestorOf(formWindow()->mainContainer(), action))        return;    m_dragging = true;    event->acceptProposedAction();    if (checkAction(action)) {        adjustIndicator(event->pos());    }}void QDesignerMenuBar::dragMoveEvent(QDragMoveEvent *event){    if (checkAction(actionMimeData(event->mimeData()))) {        event->acceptProposedAction();        adjustIndicator(event->pos());    } else {        event->ignore();        int index = findAction(event->pos());        showMenu(index);    }}void QDesignerMenuBar::dragLeaveEvent(QDragLeaveEvent *){    m_dragging = false;    adjustIndicator(QPoint(-1, -1));}void QDesignerMenuBar::dropEvent(QDropEvent *event){    m_dragging = false;    if (const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData())) {        QAction *action = d->items.first();        if (checkAction(action)) {            event->acceptProposedAction();            int index = findAction(event->pos());            index = qMin(index, actions().count() - 1);            InsertActionIntoCommand *cmd = new InsertActionIntoCommand(formWindow());            cmd->init(this, action, safeActionAt(index));            formWindow()->commandHistory()->push(cmd);            m_currentIndex = index;            update();            adjustIndicator(QPoint(-1, -1));            return;        }    }    event->ignore();}void QDesignerMenuBar::actionEvent(QActionEvent *event){    QMenuBar::actionEvent(event);}QDesignerFormWindowInterface *QDesignerMenuBar::formWindow() const{    return QDesignerFormWindowInterface::findFormWindow(const_cast<QDesignerMenuBar*>(this));}QDesignerActionProviderExtension *QDesignerMenuBar::actionProvider(){    if (QDesignerFormWindowInterface *fw = formWindow()) {        QDesignerFormEditorInterface *core = fw->core();        return qt_extension<QDesignerActionProviderExtension*>(core->extensionManager(), this);    }    return 0;}QAction *QDesignerMenuBar::currentAction() const{    if (m_currentIndex < 0 || m_currentIndex >= actions().count())        return 0;    return safeActionAt(m_currentIndex);}int QDesignerMenuBar::realActionCount() const{    return actions().count() - 1; // 1 fake actions}void QDesignerMenuBar::moveLeft(bool ctrl){    if (ctrl)        (void) swap(m_currentIndex, m_currentIndex - 1);    m_currentIndex = qMax(0, --m_currentIndex);    update();}bool QDesignerMenuBar::dragging() const{    return m_dragging;}void QDesignerMenuBar::moveRight(bool ctrl){    if (ctrl)        (void) swap(m_currentIndex + 1, m_currentIndex);    m_currentIndex = qMin(actions().count() - 1, ++m_currentIndex);    update();}void QDesignerMenuBar::moveUp(){    update();}void QDesignerMenuBar::moveDown(){    showMenu();}void QDesignerMenuBar::adjustSpecialActions(){    removeAction(m_addMenu);    addAction(m_addMenu);}bool QDesignerMenuBar::interactive(bool i){    bool old = m_interactive;    m_interactive = i;    return old;}void QDesignerMenuBar::hideMenu(int index){    if (index < 0 && m_currentIndex >= 0)        index = m_currentIndex;    if (index < 0 || index >= realActionCount())        return;    QAction *action = safeActionAt(index);    if (action && action->menu()) {        action->menu()->hide();        if (QDesignerMenu *menu = qobject_cast<QDesignerMenu*>(action->menu())) {            menu->closeMenuChain();        }    }}void QDesignerMenuBar::deleteMenu(){    QAction *action = currentAction();    if (action && !qobject_cast<SpecialMenuAction*>(action)) {        int pos = actions().indexOf(action);        QAction *action_before = 0;        if (pos != -1)            action_before = safeActionAt(pos + 1);        formWindow()->beginCommand("Remove menu");        RemoveActionFromCommand *cmd = new RemoveActionFromCommand(formWindow());        cmd->init(this, action, action_before);        formWindow()->commandHistory()->push(cmd);        RemoveMenuActionCommand *cmd2 = new RemoveMenuActionCommand(formWindow());        cmd2->init(action, this);        formWindow()->commandHistory()->push(cmd2);        formWindow()->endCommand();    }}void QDesignerMenuBar::showMenu(int index){    if (index < 0 && m_currentIndex >= 0)        index = m_currentIndex;    if (index < 0 || index >= realActionCount())        return;    m_currentIndex = index;    QAction *action = currentAction();    if (action && action->menu()) {        if (m_lastMenuActionIndex != -1 && m_lastMenuActionIndex != index) {            hideMenu(m_lastMenuActionIndex);        }        m_lastMenuActionIndex = index;        QMenu *menu = action->menu();        QRect g = actionGeometry(action);        if (!menu->isVisible()) {            if ((menu->windowFlags() & Qt::Popup) != Qt::Popup)                menu->setWindowFlags(Qt::Popup);            menu->adjustSize();            menu->move(mapToGlobal(g.bottomLeft()));            menu->setFocus(Qt::MouseFocusReason);            menu->raise();            menu->show();        } else {            menu->raise();        }    }}QAction *QDesignerMenuBar::safeActionAt(int index) const{    if (index < 0 || index >= actions().count())        return 0;    return actions().at(index);}bool QDesignerMenuBar::swap(int a, int b){    int left = qMin(a, b);    int right = qMax(a, b);    QAction *action_a = safeActionAt(left);    QAction *action_b = safeActionAt(right);    if (action_a == action_b            || !action_a            || !action_b            || qobject_cast<SpecialMenuAction*>(action_a)            || qobject_cast<SpecialMenuAction*>(action_b))        return false; // nothing to do    right = qMin(right, realActionCount());    if (right < 0)        return false; // nothing to do    formWindow()->beginCommand(QLatin1String("Move action"));    QAction *action_b_before = safeActionAt(right + 1);    RemoveActionFromCommand *cmd1 = new RemoveActionFromCommand(formWindow());    cmd1->init(this, action_b, action_b_before, false);    formWindow()->commandHistory()->push(cmd1);    QAction *action_a_before = safeActionAt(left + 1);    InsertActionIntoCommand *cmd2 = new InsertActionIntoCommand(formWindow());    cmd2->init(this, action_b, action_a_before, false);    formWindow()->commandHistory()->push(cmd2);    RemoveActionFromCommand *cmd3 = new RemoveActionFromCommand(formWindow());    cmd3->init(this, action_a, action_b, false);    formWindow()->commandHistory()->push(cmd3);    InsertActionIntoCommand *cmd4 = new InsertActionIntoCommand(formWindow());    cmd4->init(this, action_a, action_b_before, true);    formWindow()->commandHistory()->push(cmd4);    formWindow()->endCommand();    return true;}void QDesignerMenuBar::keyPressEvent(QKeyEvent *event){    event->ignore();}void QDesignerMenuBar::keyReleaseEvent(QKeyEvent *event){    event->ignore();}

⌨️ 快捷键说明

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