【Qt | QAction】Qt 的 QAction 类介绍
😁博客主页😁:🚀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