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

📄 qaction.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************** Copyright (C) 1992-2006 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://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** 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>/*  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){#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;#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);}void QActionPrivate::setShortcutEnabled(bool enable, QShortcutMap &map){    Q_Q(QAction);    if (shortcutId)        map.setShortcutEnabled(enable, shortcutId, 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().    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.*//*!    \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).*//*!    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    toolbuttons. You can override this by setting a specific    description with setText(). The same text will be used for    tooltips unless you specify a different test 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    toolbuttons. You can override this by setting a specific    description with setText(). The same text will be used for    tooltips unless you specify a different test 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);}/*!    Returns the parent widget.*/QWidget *QAction::parentWidget() const{    QObject *ret = parent();    while (ret && !ret->isWidgetType())        ret = ret->parent();    return (QWidget*)ret;}#ifndef QT_NO_SHORTCUT/*!    \property QAction::shortcut    \brief the action's 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){    Q_D(QAction);    if (d->shortcut == shortcut)        return;    d->shortcut = shortcut;    d->redoGrab(qApp->d_func()->shortcutMap);    d->sendDataChanged();}QKeySequence QAction::shortcut() const{    Q_D(const QAction);    return d->shortcut;}/*!    \property QAction::shortcutContext    \brief the context for the action's shortcut    Valid values for this property can be found in \l Qt::ShortcutContext.    The default value is Qt::WindowShortcut.*/void QAction::setShortcutContext(Qt::ShortcutContext context){    Q_D(QAction);    if (d->shortcutContext == context)        return;    d->shortcutContext = context;    d->redoGrab(qApp->d_func()->shortcutMap);    d->sendDataChanged();}Qt::ShortcutContext QAction::shortcutContext() const{    Q_D(const QAction);    return d->shortcutContext;}#endif // QT_NO_SHORTCUT/*!    \property QAction::font    \brief the action's font    The font property is used to render the text set on the    QAction. The font will can be considered a hint as it will not be    consulted in all cases based upon application and style.    \sa QAction::setText() QStyle*/void QAction::setFont(const QFont &font){    Q_D(QAction);    if (d->font == font)        return;    d->fontSet = true;    d->font = font;    d->sendDataChanged();}QFont QAction::font() const{    Q_D(const QAction);    return d->font;}#ifdef QT3_SUPPORT/*!    Use one of the QAction constructors that doesn't take a \a name    argument and call setObjectName() instead.*/QAction::QAction(QObject* parent, const char* name) : QObject(*(new QActionPrivate), parent){    Q_D(QAction);    setObjectName(QString::fromAscii(name));    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}/*!    Use one of the QAction constructors that doesn't take a \a name    argument and call setObjectName() instead.*/QAction::QAction(const QString &text, const QKeySequence &shortcut, QObject* parent, const char* name) : QObject(*(new QActionPrivate), parent){    Q_D(QAction);    setObjectName(QString::fromAscii(name));    d->text = text;    setShortcut(shortcut);    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}/*!    Use one of the QAction constructors that doesn't take a \a name    argument and call setObjectName() instead.*/QAction::QAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut,                 QObject* parent, const char* name)    : QObject(*(new QActionPrivate), parent){    Q_D(QAction);    setObjectName(QString::fromAscii(name));    d->text = text;    setShortcut(shortcut);    d->icon = icon;    d->group = qobject_cast<QActionGroup *>(parent);    if (d->group)        d->group->addAction(this);}#endif/*!    Destroys the object and frees allocated resources.*/QAction::~QAction(){    Q_D(QAction);    for (int i = d->widgets.size()-1; i >= 0; --i) {        QWidget *w = d->widgets.at(i);        w->removeAction(this);    }    if (d->group)        d->group->removeAction(this);#ifndef QT_NO_SHORTCUT    if (d->shortcutId && qApp)        qApp->d_func()->shortcutMap.removeShortcut(d->shortcutId, this);#endif}/*!  Sets this action group to \a group. The action will be automatically  added to the group's list of actions.  Actions within the group will be mutually exclusive.  \sa QActionGroup, QAction::actionGroup()*/void QAction::setActionGroup(QActionGroup *group){    Q_D(QAction);    if(group == d->group)        return;    if(d->group)        d->group->removeAction(this);    d->group = group;    if(group)        group->addAction(this);}/*!  Returns the action group for this action. If no action group manages  this action then 0 will be returned.  \sa QActionGroup, QAction::setActionGroup()*/QActionGroup *QAction::actionGroup() const{    Q_D(const QAction);    return d->group;}/*!    \property QAction::icon    \brief the action's icon    In toolbars, the icon is used as the tool button icon; in menus,    it is displayed to the left of the menu text. There is no default    icon.    If a null icon (QIcon::isNull() is passed into this function,    the icon of the action is cleared.*/void QAction::setIcon(const QIcon &icon){    Q_D(QAction);    d->icon = icon;    d->sendDataChanged();}QIcon QAction::icon() const{    Q_D(const QAction);    return d->icon;}#ifndef QT_NO_MENU/*!  Returns the menu contained by this action. Actions that contain  menus can be used to create menu items with submenus, or inserted  into toolbars to create buttons with popup menus.  \sa QMenu::addAction()*/QMenu *QAction::menu() const{    Q_D(const QAction);    return d->menu;}/*!    Sets the menu contained by this action to the specified \a menu.*/void QAction::setMenu(QMenu *menu){    Q_D(QAction);    d->menu = menu;    d->sendDataChanged();}#endif // QT_NO_MENU/*!  If \a b is true then this action will be considered a separator.  How a separator is represented depends on the widget it is inserted  into. Under most circumstances the text, submenu, and icon will be  ignored for separator actions.  \sa QAction::isSeparator()*/void QAction::setSeparator(bool b){    Q_D(QAction);    if (d->separator == b)        return;    d->separator = b;    d->sendDataChanged();}/*!  Returns true if this action is a separator action; otherwise it  returns false.  \sa QAction::setSeparator()*/bool QAction::isSeparator() const{    Q_D(const QAction);    return d->separator;}/*!    \property QAction::text    \brief the action's descriptive text    If the action is added to a menu, the menu option will consist of    the icon (if there is one), the text, and the shortcut (if there    is one). If the text is not explicitly set in the constructor, or    by using setText(), the action's description icon text will be    used as text. There is no default text.    \sa iconText*/void QAction::setText(const QString &text){    Q_D(QAction);    if (d->text == text)        return;    d->text = text;    d->sendDataChanged();}QString QAction::text() const{    Q_D(const QAction);    QString s = d->text;    if(s.isEmpty()) {

⌨️ 快捷键说明

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