当前位置: 首页 > news >正文

QT6 源(105)篇二:阅读与注释 QAction,给出源代码

(5)本源代码来自于头文件 qaction . h

#ifndef QACTION_H
#define QACTION_H#include <QtGui/qtguiglobal.h>
#if QT_CONFIG(shortcut)
#  include <QtGui/qkeysequence.h>
#endif
#include <QtGui/qicon.h>
#include <QtCore/qstring.h>
#include <QtCore/qvariant.h>QT_REQUIRE_CONFIG(action);QT_BEGIN_NAMESPACE //说明本类定义于 Qt 的全局命名空间class QActionEvent;
class QActionGroup;
class QActionPrivate;#ifndef QT_NO_DEBUG_STREAM //说明本类的指针可以用于打印
Q_GUI_EXPORT QDebug operator<<(QDebug, const QAction *);
#endifclass Q_GUI_EXPORT QAction : public QObject
{Q_OBJECTQ_DECLARE_PRIVATE(QAction)//此属性表示 Action是否可见(例如在菜单和工具栏中),//如果visible为true,则该 QAction可以被用户看到(例如在菜单和工具栏中)并选择;//如果visible为false,则该 QAction不能被用户看到或选择。 ////不可见的 QAction不会变灰;它们根本不会显示。 默认情况下,此属性为真(QAction可见)。Q_PROPERTY(bool       visible     //表本菜单项是否可见READ    isVisible     WRITE  setVisibleNOTIFY    visibleChanged  FINAL)//此属性包含动作的描述性文本。机器翻译总把 action控件翻译为操作,不再修改了,下同。//如果该操作被添加到菜单中,菜单选项将包括图标(如果有的话)、文本和快捷键(如果有的话)。//如果在构造函数中没有显式设置文本,或者使用setText()设置了文本,//则该操作的描述图标文本 iconText将被用作文本。没有默认文本。Q_PROPERTY(QString    text        //这是菜单栏里的按钮文本READ      text        WRITE  setTextNOTIFY  changed)      //若本属性为空,则用 iconText替代为本属性值Q_PROPERTY(QString    iconText    //这是工具栏里的按钮文本READ      iconText    WRITE   setIconTextNOTIFY  changed)      //同一个信号函数//此属性持有操作图标。//在工具栏中,该图标用作工具按钮图标;在菜单中,它显示在菜单文本的左侧。没有默认图标。//如果将空图标(Olcon::isNull())传递给此函数,则清除动作的图标。Q_PROPERTY(QIcon      icon        //本按钮的图片READ      icon        WRITE  setIconNOTIFY  changed)//此属性表示操作是否应在菜单中显示图标。//在某些应用程序中,在工具栏中添加带有图标的操作可能是有意义的,但在菜单中则不然。//如果为真则图标(如果有效)将在菜单中显示,如果为假,则不会显示。//默认情况下,会遵循是否为该应用程序设置了 Qt::AA DontShowlconsInMenus属性。//显式设置此属性会覆盖该属性的存在(或不存在)。Q_PROPERTY(bool       iconVisibleInMenu //菜单栏里的按钮图标是否可见READ    isIconVisibleInMenu   WRITE   setIconVisibleInMenuNOTIFY  changed)//此属性包含操作的提示信息。此文本用于工具提示。如果没有指定工具提示,则使用动作的文本。//默认情况下,此属性包含操作的文字。 By default, this property contains the action's text.Q_PROPERTY(QString    toolTip     //工具栏里的按钮提示词READ      toolTip     WRITE   setToolTipNOTIFY  changed)Q_PROPERTY(QString    statusTip   //状态栏里的按钮提示词,可以写更长READ      statusTip   WRITE   setStatusTipNOTIFY  changed)      //若状态栏包含有常备控件,则本提示词具备顶级显示的权力//此属性持有操作的状态提示。状态提示显示在由动作的顶级父控件提供的所有状态栏上。//默认情况下,此属性包含一个空字符串。Q_PROPERTY(QString    whatsThis   //用于存储对本菜单项的帮助文本 help,内容READ      whatsThis   WRITE   setWhatsThisNOTIFY  changed)//This property holds the action's "What's This?" help text。//The "What's This?" text is used to provide a brief description of the action.//The text may contain rich text. There is no default "What's This?" text.//此属性持有动作的字体。字体属性用于渲染设置在QAction上的文本。//字体可以被视为一个提示,因为根据应用程序和样式它不会在所有情况下被咨询。//默认情况下,此属性包含应用程序的默认字体。Q_PROPERTY(QFont      font        //按菜单项上的字体READ      font        WRITE   setFontNOTIFY  changed)//class Q_GUI_EXPORT QKeySequence。//Returns the primary shortcut. Note: Getter function for property shortcut.Q_PROPERTY(QKeySequence  shortcut //快捷键READ         shortcut WRITE   setShortcutNOTIFY  changed)//enum Qt::ShortcutContext { WidgetShortcut, WindowShortcut,//                           ApplicationShortcut, WidgetWithChildrenShortcut };Q_PROPERTY(Qt::ShortcutContext  shortcutContext  //识别快捷键的范围READ                shortcutContext  WRITE  setShortcutContextNOTIFY  changed)//This property holds the context for the action's shortcut.//Valid values for this property can be found in Qt::ShortcutContext.//The default value is Qt::WindowShortcut.//此属性表示操作是否应在上下文菜单中显示快捷方式。//在某些应用程序中,在上下文菜单中设置具有快捷方式的操作是有意义的。//如果为真,则在通过上下文菜单显示操作时显示快捷方式(如果有效),如果为假,则不显示。//默认情况下,会遵循是否为该应用程序启用了 Qt::AA_DontShowShortcutsInContextMenus 属性。//显式设置此属性将覆盖该属性。Explicitly setting this property overrides the attribute.Q_PROPERTY(bool                 shortcutVisibleInContextMenuREAD              isShortcutVisibleInContextMenuWRITE            setShortcutVisibleInContextMenuNOTIFY  changed)      //表在右键快捷菜单中是否显示快捷键//此属性表示操作是否可以自动重复。//如果为真,则在系统上启用键盘自动重复的情况下,当按下键盘快捷键组合时,该操作将自动重复。默认值为真。//This property holds whether the action can auto repeat.//If true, the action will auto repeat when the//  keyboard shortcut combination is held down,//provided that keyboard auto repeat is enabled on the system.//The default value is true.Q_PROPERTY(bool       autoRepeat  //表快捷键被频繁按下时,Action是否会连续触发READ      autoRepeat  WRITE  setAutoRepeatNOTIFY  changed)//此属性持有动作的菜单角色。这表明该操作在macOS应用程序菜单中起什么作用。//默认情况下,所有操作都具有TextHeuristicRole,这意味着操作是根据其文本添加的//(请参阅OMenuBar以获取更多信息)。//在 macOs 中,只能在将操作放入菜单栏之前(通常是在第一个应用程序窗口显示之前)更改菜单角色。Q_PROPERTY(MenuRole   menuRole    //本属性仅仅用于 macOS,表本菜单项的作用READ      menuRole    WRITE  setMenuRoleNOTIFY  changed)//此属性表示操作是否启用。禁用操作不能被用户选择。它们不会从菜单或工具栏中消失,//但会以显示它们不可用的方式显示。例如,它们可能仅以灰色显示。//What's This? help on disabled actions is still available,//只要设置了 QAction::whatsThis 属性。//An action will be disabled when all widgets to which it is added//  (with QWidget::addAction()) are disabled or not visible.//当动作被禁用时,无法通过其快捷键触发它。默认情况下,此属性为真(动作已启用)。Q_PROPERTY(bool         enabled   //本按钮是否可用READ      isEnabled   WRITE   setEnabledNOTIFY      enabledChangedRESET   resetEnabled  FINAL)//This property holds whether the action is a checkable action.//A checkable action is one which has an on/off state.//For example, in a word processor, a Bold toolbar button may be either on or off.//An action which is not a toggle action is a command action;//a command action is simply executed, e.g. file save.//By default, this property is false.       In some situations,//the state of one toggle action should depend on the state of others.//For example, "Left Align", "Center" and "Right Align" toggle actions are//mutually exclusive. To achieve exclusive toggling,//add the relevant toggle actions to a QActionGroup with the//  QActionGroup::exclusive property set to true.Q_PROPERTY(bool      checkable    //本按钮是否可复选READ   isCheckable    WRITE   setCheckableNOTIFY   checkableChanged FINAL)Q_PROPERTY(bool      checked      //本复选按钮是否被按下READ   isChecked      WRITE   setCheckedNOTIFY   toggled)     //复选按钮的按下与弹起有了变化//This property holds whether the action is checked.//Only checkable actions can be checked.//By default, this is false (the action is unchecked).//Note: The notifier signal for this property is toggled().//As toggling a QAction changes its state, it will also emit a changed() signal.//经测试:信号函数 toggled ( ) 确实还会触发一次 changed ( ) 信号函数Q_PROPERTY(Priority   priority    //表本菜单项在 UI上的优先级,默认 Normal而非 Low。READ      priority    WRITE   setPriority) //枚举 Priority就定义在本类//此属性在用户界面中保存操作的优先级。//可以设置此属性以指示在用户界面中应如何对操作进行优先级排序。//例如,当工具栏具有 Qt::ToolButtonTextBesidelcon 模式设置时,//具有低优先级的 QAction将不会显示文本标签,而只显示图片。//经测试:当工具栏具有 ToolButtonTextUnderlcon属性时,低优先级的工具栏按钮依然会显示文字。private:Q_DISABLE_COPY(QAction)friend class QActionGroup; //这些全是友元类friend class QWidget;friend class QMenu;friend class QMenuPrivate;friend class QToolButton;friend class QGraphicsWidget;QObject *    menuObject() const;void      setMenuObject(QObject * object);protected:bool         event(QEvent *) override;QAction(QActionPrivate & dd, QObject * parent);public://Constructs an action with parent.//If parent is an action group ,//the action will be automatically inserted into the group.explicit QAction(QObject * parent = nullptr);//Constructs an action with some text and parent.//If parent is an action group ,//the action will be automatically inserted into the group.explicit QAction(const QString & text, QObject * parent = nullptr);//该操作使用文本的精简版本(例如,“&Menu Option...”变为“MenuOption”)作为工具按钮的描述性文本。//您可以通过使用setText()设置特定的描述来覆盖此设置。//除非您使用setToolTip()指定不同的文本,否则相同的文本将用于工具提示。explicit QAction(const QIcon   & icon, //参数 parent也可以不是窗体组件,而是 QActionGroupconst QString & text, QObject * parent = nullptr);//Constructs an action with an icon and some text and parent.~QAction();//Q_PROPERTY(bool        visible         //表本菜单项是否可见
//           READ      isVisible         WRITE  setVisible
//           NOTIFY      visibleChanged  FINAL)bool      isVisible() const;
public Q_SLOTS:void     setVisible(bool);
Q_SIGNALS:void        visibleChanged();public:
//Q_PROPERTY(QString         text        //这是菜单栏里的按钮文本
//           READ            text        WRITE   setText
//           NOTIFY      changed)        //若本属性为空,则用 iconText替代为本属性值QString         text() const;void         setText(const QString & text);
Q_SIGNALS:void        changed();public:
//Q_PROPERTY(QString     iconText        //这是工具栏里的按钮文本
//           READ        iconText        WRITE   setIconText
//           NOTIFY      changed)        //同一个信号函数QString     iconText() const;void     setIconText(const QString & text); //同样的信号函数,略了//Q_PROPERTY(QIcon       icon            //本按钮的图片
//           READ        icon            WRITE   setIcon
//           NOTIFY      changed)QIcon       icon() const;void     setIcon(const QIcon & icon);//Q_PROPERTY(bool        iconVisibleInMenu     //菜单栏里的按钮图标是否可见
//           READ        isIconVisibleInMenu   WRITE   setIconVisibleInMenu
//           NOTIFY      changed)bool        isIconVisibleInMenu() const;void       setIconVisibleInMenu(bool visible);//Q_PROPERTY(QString     toolTip        //工具栏里的按钮提示词
//           READ        toolTip        WRITE   setToolTip
//           NOTIFY      changed)QString     toolTip() const;void     setToolTip(const QString & tip);//Q_PROPERTY(QString     statusTip      //状态栏里的按钮提示词,可以写更长
//           READ        statusTip      WRITE   setStatusTip
//           NOTIFY      changed)       //若状态栏包含有常备控件,则本提示词具备顶级显示的权力QString     statusTip() const;void     setStatusTip(const QString & statusTip);//Q_PROPERTY(QString     whatsThis      //用于存储对本菜单项的帮助文本 help,内容
//           READ        whatsThis      WRITE   setWhatsThis
//           NOTIFY      changed)QString     whatsThis() const;void     setWhatsThis(const QString & what);//Q_PROPERTY(QFont       font           //按菜单项上的字体
//           READ        font           WRITE   setFont
//           NOTIFY      changed)QFont       font() const;void     setFont(const QFont & font);//Q_PROPERTY(QKeySequence    shortcut    //快捷键
//           READ            shortcut    WRITE   setShortcut
//           NOTIFY          changed)QKeySequence    shortcut() const;void         setShortcut(const QKeySequence & shortcut);//Returns the list of shortcuts, //说明允许为一个按钮绑定多个快捷键。//  with the primary shortcut as the first element of the list.QList<QKeySequence>     shortcuts() const; //class QKeySequence {...};void                 setShortcuts(const QList<QKeySequence> & shortcuts);//Sets shortcuts as the list of shortcuts that trigger the action.//The first element of the list is the primary shortcut.void                 setShortcuts(QKeySequence::StandardKey   key);//Sets a platform dependent list of shortcuts based on the key.//调用此函数的结果取决于当前运行的平台。//请注意此操作可以分配多个快捷方式。如果只需要主快捷方式,请使用setShortcut。//Q_PROPERTY(Qt::ShortcutContext    shortcutContext    //识别快捷键的范围
//           READ                   shortcutContext    WRITE    setShortcutContext
//           NOTIFY                 changed)Qt::ShortcutContext    shortcutContext() const;void                setShortcutContext(Qt::ShortcutContext context);//Q_PROPERTY(bool                 shortcutVisibleInContextMenu
//           READ              isShortcutVisibleInContextMenu
//           WRITE            setShortcutVisibleInContextMenu
//           NOTIFY               changed)            //表在右键快捷菜单中是否显示快捷键bool              isShortcutVisibleInContextMenu() const;void            setShortcutVisibleInContextMenu(bool show);//Q_PROPERTY(bool         autoRepeat     //表快捷键被频繁按下时,Action是否会连续触发
//           READ         autoRepeat     WRITE    setAutoRepeat
//           NOTIFY       changed)bool         autoRepeat() const;void      setAutoRepeat(bool);// note this is copied into qplatformmenu.h, which must stay in syncenum     MenuRole {NoRole = 0,TextHeuristicRole,ApplicationSpecificRole,AboutQtRole,AboutRole,PreferencesRole,QuitRole};Q_ENUM(  MenuRole )
//Q_PROPERTY(MenuRole     menuRole      //本属性仅仅用于 macOS,表本菜单项的作用
//           READ         menuRole      WRITE    setMenuRole
//           NOTIFY       changed)MenuRole     menuRole() const;void      setMenuRole(MenuRole menuRole);//Q_PROPERTY(bool         enabled       //本按钮是否可用
//           READ       isEnabled       WRITE   setEnabled
//           NOTIFY       enabledChanged
//           RESET   resetEnabled       FINAL)bool       isEnabled() const;
public Q_SLOTS:void      setEnabled(bool);
Q_SIGNALS:void         enabledChanged(bool enabled);
public Q_SLOTS:void    resetEnabled();public:
//Q_PROPERTY(bool         checkable     //本按钮是否可复选
//           READ       isCheckable     WRITE   setCheckable
//           NOTIFY       checkableChanged  FINAL)bool       isCheckable() const;void      setCheckable(bool);
Q_SIGNALS:void         checkableChanged(bool checkable);public:
//Q_PROPERTY(bool         checked       //本复选按钮是否被按下
//           READ       isChecked       WRITE   setChecked
//           NOTIFY       toggled)      //复选按钮的按下与弹起有了变化bool       isChecked() const;
public Q_SLOTS:void      setChecked(bool);
Q_SIGNALS:void         toggled(bool);public:enum     Priority {LowPriority   =   0,NormalPriority   = 128,HighPriority   = 256};Q_ENUM(  Priority  )
//Q_PROPERTY(Priority     priority      //表本菜单项在 UI上的优先级,默认 Normal而非 Low。
//           READ         priority      WRITE   setPriority) //枚举 Priority就定义在本类Priority     priority() const;void      setPriority(Priority  priority);//Returns true if this action is a separator action; otherwise it returns false.bool       isSeparator() const;void      setSeparator(bool b); //原来菜单栏里的分隔符也是 QAciton类型//If b is true then this action will be considered a separator.//分隔符的表示方式取决于它插入的组件。在大多数情况下,对于分隔符操作,文本、子菜单和图标将被忽略。QVariant    data() const; //Returns the user data as set in QAction::setData.void     setData(const QVariant & var); //看来可以为按钮关联一个任意类型的值//Sets the action's internal data to the given var.//Returns the action group for this action.//If no action group manages this action, then nullptr will be returned.QActionGroup *     actionGroup() const;void            setActionGroup(QActionGroup * group);//Sets this action group to group.//The action will be automatically added to the group's list of actions.//Actions within the group will be mutually exclusive.//官方注释指出:属于同一组的 QAction将自动互斥bool showStatusText(QObject * object = nullptr); //顾名思义,展示状态栏的文本//Updates the relevant status bar for the//  UI represented by object by sending a QStatusTipEvent.//Returns true if an event was sent, otherwise returns false.//If a null widget is specified, the event is sent to the action's parent.QList<QObject *> associatedObjects() const; //比如本按钮既在菜单栏,又在工具栏里。//Returns a list of objects this action has been added to.enum ActionEvent {Trigger, //this will cause the QAction::triggered() signal to be emittedHover    //this will cause the QAction::hovered()   signal to be emitted.};void activate(ActionEvent event); //用于让QAction发射信号函数。本函数又被下面的函数调用//Sends the relevant signals for ActionEvent event.//Action-based widgets use this API to cause the QAction to emit//  signals as well as emitting their own.public Q_SLOTS://     void    setEnabled(bool);//     void  resetEnabled(    );//     void    setVisible(bool);//     void    setChecked(bool);inline void    setDisabled(bool b) { setEnabled(!b); } //借助 setEnabled()实现本函数//用程序的方法使复选框的选中状态发生改变。void toggle   (); //Connect to it to change the checked state to its opposite state.void hover    () { activate(Hover  ); }//This is a convenience slot that calls activate(Hover).void trigger  () { activate(Trigger); } //对按钮的实际触发操作,就叫 trigger//This is a convenience slot that calls activate(Trigger).
Q_SIGNALS://这个信号在用户激活某个操作时发出:例如,当用户单击菜单选项、工具栏按钮或按下某个操作的快捷键组合时,//  或者当调用trigger()时。值得注意的是,当调用setChecked()或toggle()时,它不会被释放。void triggered(bool checked = false); //本信号适用于所有的按钮,单选、复选或普通按钮。void hovered(); //用户对按钮的悬停操作。//此信号在用户高亮显示某个操作时发出;//例如,当用户将光标停留在菜单选项、工具栏按钮上或按下某个操作的快捷键组合时。//void    enabledChanged(bool enabled  );//void           changed(); //当很多无关紧要的属性的值发生变化时,会触发本信号。//void  checkableChanged(bool checkable);//void    visibleChanged();//void           toggled(bool); //本属性只适用于复选按钮,具有复选状态的按钮。//This signal is emitted whenever//   a checkable action changes its isChecked()status.//This can be the result of a user interaction,//  or because setChecked() was called.//As setChecked() changes the QAction,//  it emits changed() in addition to toggled().//checked is true if the action is checked, or false if the action is unchecked.}; //完结 class QAction : public QObjectQT_END_NAMESPACE#endif // QACTION_H

(6)

谢谢

相关文章:

  • RJ连接器的未来:它还会是网络连接的主流标准吗?
  • Java-Objects类高效应用的全面指南
  • Vue百日学习计划Day19-20天详细计划-Gemini版
  • 从数据分析到数据可视化:揭开数据背后的故事
  • ArrayList-集合使用
  • 【C语言练习】046. 编写插入排序算法
  • 编译原理实验五:LR语法分析器的控制程序
  • BrepGen中的几何特征组装与文件保存详解 deepwiki occwl OCC包装库
  • 亲测有效!OGG 创建抽取进程报错 OGG-08241,如何解决?
  • gRPC开发指南:Visual Studio 2022 + Vcpkg + Windows全流程配置
  • 深入理解 Java 字节码操作码
  • Rust 数据结构:HashMap
  • 【沉浸式求职学习day42】【算法题:滑动窗口】
  • NVC++ 介绍与使用指南
  • LeetCode 33. 搜索旋转排序数组:二分查找的边界艺术
  • 计算机视觉与深度学习 | Matlab实现EMD-LSTM和LSTM时间序列预测对比(完整源码和数据)
  • PIC16F18877 ADC 代码
  • Reactor (epoll实现基础)
  • 木材价格动态定价实战指南:多算法模型与行业案例深度解析
  • 机器学习-人与机器生数据的区分模型测试 -数据筛选
  • 美国考虑让移民上真人秀竞逐公民权,制片人称非现实版《饥饿游戏》
  • 就规范涉企行政执法专项行动有关问题,司法部发布解答
  • “多规合一”改革7年成效如何?自然资源部总规划师亮成绩单
  • 中国进出口银行:1-4月投放制造业中长期贷款超1800亿元
  • 舱位已排到月底,跨境电商忙补货!美线订单大增面临爆舱,6月运价或翻倍
  • 张汝伦:康德和种族主义