😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:
本文未经允许,不得转发!!!
目录
- 🎄一、概述
- 🎄二、QAction 构造方法和属性方法
- ✨2.1 构造方法
- ✨2.2 属性方法
 
- 🎄三、信号(Signals)、槽(Slots)
- ✨3.1 信号(Signals)
- ✨3.2 槽(Slots)
 
- 🎄四、总结

 
🎄一、概述
QAction类提供了一个抽象的用户界面操作,可以插入到小部件(widgets)中。
在应用程序中,可以通过菜单(menus)、工具栏按钮(toolbar buttons)和键盘快捷键(keyboard shortcuts)调用许多常用命令。由于用户希望以相同的方式执行每个命令,而不管使用的用户界面是什么,因此将每个命令表示为动作(action)是有用的。
动作(Action)可以添加到菜单和工具栏,并将自动保持同步。例如,在文字处理程序中,如果用户按下“粗体”工具栏按钮,将自动选中“粗体”菜单项。
动作(Action)可以作为独立对象创建,但也可以在菜单构建过程中创建;QMenu类包含方便的函数,用于创建适合作为菜单项使用的操作。
QAction可能包含一个图标、菜单文本、快捷方式、状态文本、“What’s This?”文本和一个工具提示。其中大多数可以在构造函数中设置。它们也可以通过setIcon()、setText()、setIconText()、setShortcut()、setStatusTip()、setWhatsThis()和setToolTip()独立设置。对于菜单项,可以使用setFont()设置单独的字体。
使用QWidget::addAction()或QGraphicsWidget::addAction()将动作添加到小部件(widgets)中。注意,在使用小部件(widget)之前,必须向其添加操作;用作快捷方式时(即Qt::ApplicationShortcut或Qt::ShortcutContext)也应该这样做,并且快捷方式应该是全局的。
创建QAction后,应该将其添加到相关菜单和工具栏中,然后连接到执行该操作的槽。例如:
const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
QAction *openAct = new QAction(openIcon, tr("&Open..."), this);
openAct->setShortcuts(QKeySequence::Open);
openAct->setStatusTip(tr("Open an existing file"));
connect(openAct, &QAction::triggered, this, &MainWindow::open);
fileMenu->addAction(openAct);
fileToolBar->addAction(openAct);
我们建议将操作创建为使用它们的窗口的子窗口。在大多数情况下,操作(Action)将是应用程序主窗口(main window)的子窗口。

🎄二、QAction 构造方法和属性方法
✨2.1 构造方法
QAction(QObject *parent = nullptr);
QAction(const QString &text, QObject *parent = nullptr);
QAction(const QIcon &icon, const QString &text, QObject *parent = nullptr);
✨2.2 属性方法
文本和图标:
QString text() const
获取动作的文本标签。
void setText(const QString &text)
设置动作的文本标签。
QIcon icon() const
获取动作的图标。
void setIcon(const QIcon &icon)
设置动作的图标。
QString iconText() const
获取动作的图标文本
void setIconText(const QString &text)
设置动作的图标文本
状态:
bool isCheckable() const
返回动作是否可选中
void setCheckable(bool)
设置动作可否选中
bool isChecked() const
返回动作是否被选中(适用于复选框)。
void setChecked(bool checked)
设置动作的选中状态。
bool isEnabled() const
返回动作是否可用。
void setEnabled(bool enabled)
启用或禁用该动作。
快捷键:
QString shortcut() const
获取动作的快捷键。
void setShortcut(const QKeySequence &shortcut)
设置动作的快捷键。
void setShortcutContext(Qt::ShortcutContext context)
void setShortcutVisibleInContextMenu(bool show)
void setShortcuts(const QList<QKeySequence> &shortcuts)
void setShortcuts(QKeySequence::StandardKey key)
QKeySequence shortcut() const
 
Qt::ShortcutContext shortcutContext() const
 
QList<QKeySequence> shortcuts() const

🎄三、信号(Signals)、槽(Slots)
✨3.1 信号(Signals)
-  void changed()该信号在动作发生变化时发出。如果您只对给定小部件中的操作感兴趣,您可以监视 QWidget::actionEvent()发送的QEvent::ActionChanged。
 注意:
 autoRepeat属性的通知信号。
 checkable属性的通知信号。
 enabled属性的通知信号。
 font属性的通知信号。
 icon属性的通知信号。
 iconText属性的通知信号。
 iconVisibleInMenu属性的通知信号。
 menuRole属性的通知信号。
 shortcut属性的通知信号。
 shortcutContext属性的通知器信号。
 shortcutVisibleInContextMenu属性的通知信号。
 statusTip属性的通知信号。
 text属性的通知信号。
 toolTip属性的通知信号。
 visable属性的通知信号。
 whatsThis属性的通知信号。
-  void hovered()当用户突出显示(highlighted)某个动作时,就会发出这个信号;例如,当用户将光标停在菜单选项、工具栏按钮或按下操作的快捷键组合时。 
-  void toggled(bool checked)当一个使能了可选(checkable)的动作改变了它的isChecked()状态时,就会发出这个信号。这可能是用户交互的结果,也可能是因为调用了setChecked()。当setChecked()更改QAction时,除了toggle()之外,它还会发出changed()。 如果Action被选中,则参数checked为true,如果Action未被选中,则参数checked为false。 注意: checked属性的通知信号。
-  void triggered(bool checked = false)当一个动作被用户激活时,就会发出这个信号;例如,当用户单击菜单选项、工具栏按钮或按下操作的快捷键组合时,或者调用trigger()时。值得注意的是,当setChecked()或toggle()被调用时,它不会被触发。 如果Action是可选的(checkable),则参数checked为true表示Action被选中,参数checked为false表示Action未被选中。 
✨3.2 槽(Slots)
void hover()
这是一个很方便的槽,使action活跃(activate(Hover))。
void setChecked(bool)
设置动作的选中状态。
void setDisabled(bool b)
设置动作未使能。
void setEnabled(bool)
设置动作使能。
void setVisible(bool)
设置动作可见
void toggle()
这是一个用于checked属性的方便函数。连接到它以将 checked 的状态更改为相反的状态。
void trigger()
触发动作,使action活跃(activate(trigger))。

🎄四、总结
👉本文介绍了Qt的 QActioin 类,详细介绍了该类重要的信号、槽函数。
常用的方法总结
- QAction::QAction( const QString & text, QObject * parent )
QAction类的构造函数之一,利用text,parent创建QAction对象。QAction对象一般为菜单中的菜单项,比如 “文件"菜单中"新建"选项就是一个QAction对象,上述构造函数中text成员变量即为菜单项所表示的内容。
用法:QAction *newAction = new QAction(tr(”&New"),this);- void QAction::setIcon ( const QIcon& icon )
该函数可设置菜单项名称前的图标
用法:newAction->setIcon(QIcon(“:/images/new.png”));- void QAction::setShortcut ( const QKeySequence & shortcut );
设置QAction对象执行的快捷键
用法:newAction->setShortcut(tr(“Ctrl+N”));- void QAction::setStatusTip ( const QString & statusTip );
设置当鼠标移动到“动作”上时,状态栏显示的提示语。- void QAction::setVisible ( bool );
设置“动作”显示与否,当形参为true是,“动作”表示。- void QAction::triggered ( bool checked = false ) [signal]
此函数为信号,当用户触发此“动作”时,此信号发射。例如用户点击了菜单中的菜单项等。
此函数一般用法为:在QObject::connect()函数中作为信号参数,用于触发“动作”所对应执行的槽函数——实现“动作”的功能函数,例如:“新建”按钮被用户按下,所需要的功能可能是新建一个文档,那么新建一个文档的动作就在这个槽函数中实现。至于此信号函数中的形参暂时可以忽略。以后会在介绍QObject类中的静态方法connect()函数时详细解说。- void QAction::setCheckable ( bool );
此函数用于设置QAction类中的私有变量: bool checkable ,此属性用以提供“动作”是否为复选动作,例如Qt Creator中“控件”菜单中的“全屏”菜单项即为复选动作菜单
🌰举例子:
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QAction>
#include <QMessageBox>
 
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QMainWindow window;
 
    // 创建 QAction
    QAction *action = new QAction("Show Message", &window);
    action->setIcon(QIcon::fromTheme("dialog-information")); // 设置图标
    action->setShortcut(QKeySequence("Ctrl+M"));              // 设置快捷键
 
    // 连接 triggered 信号
    QObject::connect(action, &QAction::triggered, []() {
        QMessageBox::information(nullptr, "Info", "Action triggered!");
    });
 
    // 创建菜单并添加 QAction
    QMenu *menu = window.menuBar()->addMenu("File");
    menu->addAction(action);
 
    window.resize(300, 200);
    window.show();
 
    return app.exec();
}
🌰例子2:使用Action构造工具栏和菜单栏
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    initMenu();
    initToolBar();
}
void MainWindow::initMenu()
{
    /* 初始化File菜单 */
    fileMenu = new QMenu(tr("File"), this);
    fileOpenAction = new QAction("&Open...", this);
    fileSaveAction = new QAction("&Save...", this);
    fileMenu->addAction(fileOpenAction);
    fileMenu->addAction(fileSaveAction);
    /* 初始化Edit菜单 */
    editMenu = new QMenu("&Edit");
    editCopyAction = editMenu->addAction("&Copy");
    editCutAction = editMenu->addAction("&Cut");
    /* 将菜单添加到菜单栏上 */
    QMenuBar *menuBar = this->menuBar();
    menuBar->addMenu(fileMenu);
    menuBar->addMenu(editMenu);
}
void MainWindow::initToolBar()
{
    /* 初始化FileToolBar */
    fileToolBar = new QToolBar(this);
    fileToolBar->addAction(fileOpenAction);
    fileToolBar->addAction(fileSaveAction);
    /* 初始化EditToolBar */
    editToolBar = new QToolBar(this);
    editToolBar->addAction(editCopyAction);
    editToolBar->addAction(editCutAction);
    /* 将工具添加到工具栏上 */
    addToolBar(Qt::TopToolBarArea, fileToolBar);
    addToolBar(Qt::TopToolBarArea, editToolBar);
}
MainWindow::~MainWindow()
{
    
}

 如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
参考:
 《Qt assistant 文档》
 https://blog.csdn.net/sinat_31608641/article/details/124898305
 https://www.cnblogs.com/hehe001/archive/2013/05/05/6334433.html



















