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

📄 qaction.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qaction.h"#include "qactiongroup.h"#ifndef QT_NO_ACTION#include "qaction_p.h"#include "qapplication.h"#include "qevent.h"#include "qlist.h"#include "qdebug.h"#include <private/qshortcutmap_p.h>#include <private/qapplication_p.h>#include <private/qmenu_p.h>#define QAPP_CHECK(functionName) \    if (!qApp) { \        qWarning("QAction: Initialize QApplication before calling '" functionName "'."); \        return; \    }/*  internal: guesses a descriptive text from a text suited for a menu entry */static QString qt_strippedText(QString s){    s.remove( QString::fromLatin1("...") );    int i = 0;    while (i < s.size()) {        ++i;        if (s.at(i-1) != QLatin1Char('&'))            continue;        if (i < s.size() && s.at(i) == QLatin1Char('&'))            ++i;        s.remove(i-1,1);    }    return s.trimmed();};QActionPrivate::QActionPrivate() : group(0), enabled(1), forceDisabled(0),                                   visible(1), forceInvisible(0), checkable(0), checked(0), separator(0), fontSet(false),                                   menuRole(QAction::TextHeuristicRole){#ifdef QT3_SUPPORT    static int qt_static_action_id = -1;    param = id = --qt_static_action_id;    act_signal = 0;#endif#ifndef QT_NO_SHORTCUT    shortcutId = 0;    shortcutContext = Qt::WindowShortcut;    autorepeat = true;#endif}QActionPrivate::~QActionPrivate(){}void QActionPrivate::sendDataChanged(){    Q_Q(QAction);    QActionEvent e(QEvent::ActionChanged, q);    for (int i = 0; i < widgets.size(); ++i) {        QWidget *w = widgets.at(i);        QApplication::sendEvent(w, &e);    }    QApplication::sendEvent(q, &e);    emit q->changed();}#ifndef QT_NO_SHORTCUTvoid QActionPrivate::redoGrab(QShortcutMap &map){    Q_Q(QAction);    if (shortcutId)        map.removeShortcut(shortcutId, q);    if (shortcut.isEmpty())        return;    shortcutId = map.addShortcut(q, shortcut, shortcutContext);    if (!enabled)        map.setShortcutEnabled(false, shortcutId, q);    if (!autorepeat)        map.setShortcutAutoRepeat(false, shortcutId, q);}void QActionPrivate::redoGrabAlternate(QShortcutMap &map){    Q_Q(QAction);    foreach (int id, alternateShortcutIds)        if (id)            map.removeShortcut(id, q);    alternateShortcutIds.clear();    if (alternateShortcuts.isEmpty())        return;    foreach (const QKeySequence& alternate, alternateShortcuts) {        if (!alternate.isEmpty())            alternateShortcutIds.append(map.addShortcut(q, alternate, shortcutContext));        else            alternateShortcutIds.append(0);    }    if (!enabled) {        foreach (int id, alternateShortcutIds)            map.setShortcutEnabled(false, id, q);    }    if (!autorepeat) {        foreach (int id, alternateShortcutIds)            map.setShortcutAutoRepeat(false, id, q);    }}void QActionPrivate::setShortcutEnabled(bool enable, QShortcutMap &map){    Q_Q(QAction);    if (shortcutId)        map.setShortcutEnabled(enable, shortcutId, q);    foreach (int id, alternateShortcutIds)        if (id)            map.setShortcutEnabled(enable, id, q);}#endif // QT_NO_SHORTCUT/*!    \class QAction    \brief The QAction class provides an abstract user interface    action that can be inserted into widgets.    \ingroup application    \mainclass    \omit        * parent and widget are different        * parent does not define context    \endomit    In applications many common commands can be invoked via menus,    toolbar buttons, and keyboard shortcuts. Since the user expects    each command to be performed in the same way, regardless of the    user interface used, it is useful to represent each command as    an \e action.    Actions can be added to menus and toolbars, and will    automatically keep them in sync. For example, in a word processor,    if the user presses a Bold toolbar button, the Bold menu item    will automatically be checked.    Actions can be created as independent objects, but they may    also be created during the construction of menus; the QMenu class    contains convenience functions for creating actions suitable for    use as menu items.    A QAction may contain an icon, menu text, a shortcut, status text,    "What's This?" text, and a tooltip. Most of these can be set in    the constructor. They can also be set independently with    setIcon(), setText(), setIconText(), setShortcut(),    setStatusTip(), setWhatsThis(), and setToolTip(). For menu items,    it is possible to set an individual font with setFont().    Actions are added to widgets using QWidget::addAction(). Note    that an action must be added to a widget before it can be used;    this is also true when the shortcut should be global (i.e.,    Qt::ApplicationShortcut as Qt::ShortcutContext).    Once a QAction has been created it should be added to the relevant    menu and toolbar, then connected to the slot which will perform    the action. For example:    \quotefile mainwindows/application/mainwindow.cpp    \skipto openAct    \printuntil connect    \skipto fileMenu->addAction(openAct    \printuntil fileMenu->addAction(openAct    \skipto fileToolBar->addAction(openAct    \printuntil fileToolBar->addAction(openAct    We recommend that actions are created as children of the window    they are used in. In most cases actions will be children of    the application's main window.    \sa QMenu, QToolBar, {Application Example}*//*!    \fn void QAction::trigger()    This is a convenience slot that calls activate(Trigger).*//*!    \fn void QAction::hover()    This is a convenience slot that calls activate(Hover).*//*!    \enum QAction::MenuRole    This enum describes how an action should be moved into the application menu on Mac OS X.    \value NoRole This action should not be put into the application menu    \value TextHeuristicRole This action should be put in the application menu based on the action's text           as described in the QMenuBar documentation.    \value ApplicationSpecificRole This action should be put in the application menu with an application specific role    \value AboutQtRole This action matches handles the "About Qt" menu item.    \value AboutRole This action should be placed where the "About" menu item is in the application menu.    \value PreferencesRole This action should be placed where the  "Preferences..." menu item is in the application menu.    \value QuitRole This action should be placed where the Quit menu item is in the application menu.*//*!    Constructs an action with \a parent. If \a parent is an action    group the action will be automatically inserted into the group.*/QAction::QAction(QObject* parent)    : QObject(*(new QActionPrivate), parent){    Q_D(QAction);    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}/*!    Constructs an action with some \a text and \a parent. If \a    parent is an action group the action will be automatically    inserted into the group.    The action uses a stripped version of \a text (e.g. "\&Menu    Option..." becomes "Menu Option") as descriptive text for    tool buttons. You can override this by setting a specific    description with setText(). The same text will be used for    tooltips unless you specify a different text using    setToolTip().*/QAction::QAction(const QString &text, QObject* parent)    : QObject(*(new QActionPrivate), parent){    Q_D(QAction);    d->text = text;    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}/*!    Constructs an action with an \a icon and some \a text and \a    parent. If \a parent is an action group the action will be    automatically inserted into the group.    The action uses a stripped version of \a text (e.g. "\&Menu    Option..." becomes "Menu Option") as descriptive text for    tool buttons. You can override this by setting a specific    description with setText(). The same text will be used for    tooltips unless you specify a different text using    setToolTip().*/QAction::QAction(const QIcon &icon, const QString &text, QObject* parent)    : QObject(*(new QActionPrivate), parent){    Q_D(QAction);    d->icon = icon;    d->text = text;    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}/*!    \internal*/QAction::QAction(QActionPrivate &dd, QObject *parent)    : QObject(dd, parent){    Q_D(QAction);    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}/*!    Returns the parent widget.*/QWidget *QAction::parentWidget() const{    QObject *ret = parent();    while (ret && !ret->isWidgetType())        ret = ret->parent();    return (QWidget*)ret;}/*!  \since 4.2  Returns a list of widgets this action has been added to.  \sa QWidget::addAction()*/QList<QWidget *> QAction::associatedWidgets() const{    Q_D(const QAction);    return d->widgets;}#ifndef QT_NO_SHORTCUT/*!    \property QAction::shortcut    \brief the action's primary shortcut key    Valid keycodes for this property can be found in \l Qt::Key and    \l Qt::Modifier. There is no default shortcut key.*/void QAction::setShortcut(const QKeySequence &shortcut){    QAPP_CHECK("setShortcut");    Q_D(QAction);    if (d->shortcut == shortcut)        return;    d->shortcut = shortcut;    d->redoGrab(qApp->d_func()->shortcutMap);    d->sendDataChanged();}/*!    \since 4.2    Sets \a shortcuts as the list of shortcuts that trigger the    action. The first element of the list is the primary shortcut.    \sa shortcut*/void QAction::setShortcuts(const QList<QKeySequence> &shortcuts){    Q_D(QAction);    QList <QKeySequence> listCopy = shortcuts;    QKeySequence primary;    if (!listCopy.isEmpty())        primary = listCopy.takeFirst();    if (d->shortcut == primary && d->alternateShortcuts == listCopy)        return;    QAPP_CHECK("setShortcuts");    d->shortcut = primary;    d->alternateShortcuts = listCopy;    d->redoGrab(qApp->d_func()->shortcutMap);    d->redoGrabAlternate(qApp->d_func()->shortcutMap);    d->sendDataChanged();}/*!    \since 4.2    Sets a platform dependent list of shortcuts based on the \a key.    The result of calling this function will depend on the currently running platform.    Note that more than one shortcut can assigned by this action.    If only the primary shortcut is required, use setShortcut instead.    \sa QKeySequence::keyBindings()*/void QAction::setShortcuts(QKeySequence::StandardKey key){    QList <QKeySequence> list = QKeySequence::keyBindings(key);    setShortcuts(list);}/*!    Returns the primary shortcut.    \sa setShortcuts()*/QKeySequence QAction::shortcut() const{    Q_D(const QAction);    return d->shortcut;}/*!    \since 4.2    Returns the list of shortcuts, with the primary shortcut as    the first element of the list.    \sa setShortcuts()*/QList<QKeySequence> QAction::shortcuts() const{    Q_D(const QAction);    QList <QKeySequence> shortcuts;    if (!d->shortcut.isEmpty())        shortcuts << d->shortcut;    if (!d->alternateShortcuts.isEmpty())        shortcuts << d->alternateShortcuts;    return shortcuts;}

⌨️ 快捷键说明

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