QAction成员函数文档

本文详细介绍了QAction类的各种构造函数及成员函数,包括如何创建不同类型的QAction对象、设置其属性如快捷键、图标等,以及如何响应用户交互。
 

成员函数文档

QAction::QAction( QObject * parent,const char * name= 0, bool toggle = FALSE )

构造一个父对象为 parent并且名称为 name的操作。

如果toggle为真,操作将是切换操作,否则它就是命令操作。

如果parentQActionGroup,新的操作会把自己插入到parent中。

为了使快捷键和状态提示能够工作,parent必须是一个窗口部件或者一个父对象为窗口部件的操作组。

QAction::QAction ( const QString & text,const QIconSet & icon,const QString & menuText,QKeySequence accel,QObject * parent,const char * name= 0, bool toggle = FALSE )

构造一个有如下属性的操作:描述为 text、图标为 icon、菜单文本为 menuText并且键盘快捷键为 accel。它是 parent的子对象并且名称为 name。如果 toggle为真,操作将是切换操作,否则它就是命令操作。

如果parentQActionGroup,新的操作会把自己插入到parent中。

为了使快捷键和状态提示能够工作,parent必须是一个窗口部件或者一个父对象为窗口部件的操作组。

textaccel将会用于工具提示和状态提示,除非你使用setToolTip()和setStatusTip()为它们提供特定文本。

QAction::QAction ( const QString & text,const QString & menuText,QKeySequence accel,QObject * parent,const char * name= 0, bool toggle = FALSE )

这个构造函数的结果是没有图标的操作:描述为 text、菜单文本为 menuText并且键盘快捷键为 accel。它是 parent的子对象并且名称为 name。如果 toggle为真,操作将是切换操作,否则它就是命令操作。

如果parentQActionGroup,新的操作会把自己插入到parent中。

为了使快捷键和状态提示能够工作,parent必须是一个窗口部件或者一个父对象为窗口部件的操作组。

textaccel将会用于工具提示和状态提示,除非你使用setToolTip()和setStatusTip()为它们提供特定文本。

QAction::~QAction ()

销毁这个对象并且释放已经分配的资源。

QKeySequenceQAction::accel () const

返回操作的快捷键。详细情况请参考“accel”属性。

void QAction::activated () [信号]

当操作被用户激活时,也就是说当用户点击菜单选项或者工具条按钮或者按下操作的快捷键组合时,这个信号被发射。

对于命令操作连接这个信号。对于切换按钮连接toggled()信号。

例如:action/application.cppchart/chartform.cppthemes/themes.cpp

bool QAction::addTo (QWidget * w) [虚]

把这个这个操作添加到窗口部件 w

现在操作可以被添加到QToolBarQPopupMenu窗口部件中。

被添加到菜单条中的操作会自动被显示为一个按钮,被添加到弹出菜单中的操作会自动显示为一个菜单项。

如果操作被添加成功,addTo()返回真,否则返回假。(如果w不是QToolBar或者QPopupMenu,操作将不会被添加并且将返回假。)

也可以参考removeFrom()。

例如:action/application.cppaction/toggleaction/toggleaction.cppchart/chartform.cpptextedit/textedit.cpp

QActionGroup中被重新实现。

void QAction::addedTo ( QWidget * actionWidget,QWidget * container) [虚 保护]

当它在 container中为这个操作创建一个窗口部件时( actionWidget),这个函数被 addTo()调用。

void QAction::addedTo ( int index,QPopupMenu * menu) [虚 保护]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

当它在弹出菜单menu中为这个操作创建一个索引为index的菜单项时,这个函数被addTo()调用。

QIconSetQAction::iconSet () const

返回操作的图标。详细情况请参考“iconSet”属性。

bool QAction::isEnabled () const

如果操作生效,返回真,否则返回假。详细情况请参考“enabled”属性。

bool QAction::isOn ()const

如果切换操作是开的,返回真,否则返回假。详细情况请参考“on”属性。

bool QAction::isToggleAction () const

如果操作是切换操作,返回真,否则返回假。详细情况请参考“toggleAction”属性。

QStringQAction::menuText ()const

返回操作的菜单文本。详细情况请参考“menuText”属性。

bool QAction::removeFrom ( QWidget * w) [虚]

从窗口部件 w中移除操作。

如果操作被成功移除,返回真,否则返回假。

也可以参考addTo()。

void QAction::setAccel ( const QKeySequence & key) [虚]

设置操作的快捷键为key。详细情况请参考“accel”属性。

void QAction::setEnabled ( bool ) [虚 槽]

设置操作是否生效。详细情况请参考“enabled”属性。

void QAction::setIconSet (const QIconSet &) [虚]

设置操作的图标。详细情况请参考“iconSet”属性。

void QAction::setMenuText (const QString &) [虚]

设置操作的菜单文本。详细情况请参考“menuText”属性。

void QAction::setOn (bool ) [虚 槽]

设置切换按钮为开。详细情况请参考“on”属性。

void QAction::setStatusTip (const QString &) [虚]

设置操作的状态提示。详细情况请参考“statusTip”属性。

void QAction::setText ( const QString &) [虚]

设置操作的描述文本。详细情况请参考“text”属性。

void QAction::setToggleAction ( bool )[虚]

设置操作是否是切换按钮。详细情况请参考“toggleAction”属性。

void QAction::setToolTip (const QString &) [虚]

设置操作的工具提示。详细情况请参考“toolTip”属性。

void QAction::setWhatsThis (const QString &) [虚]

设置操作的“这是什么?”帮助文本。详细情况请参考“whatsThis”属性。

QStringQAction::statusTip ()const

返回操作的状态提示。详细情况请参考“statusTip”属性。

QStringQAction::text () const

返回操作的描述文本。详细情况请参考“text”属性。

void QAction::toggle () [槽]

切换切换按钮的状态。

也可以参考ontoggled()和toggleAction

void QAction::toggled ( bool ) [信号]

当切换按钮改变状态时,这个信号被发射,命令操作和QActionGroups不发射toggled()。

参数表示新的状态,也就是如果切换按钮被打开,为真,或者如果它被关闭,为假。

依赖切换按钮是否被打开或者关闭来触发用户命令要把它连接到一个可以得到bool变量来识别状态的槽,例如:

        QMainWindow * window = new QMainWindow;
        QAction * labelonoffaction = new QAction( window, "labelonoff", TRUE );
        QObject::connect( labelonoffaction, SIGNAL( toggled( bool ) ),
window, SLOT( setUsesTextLabel( bool ) ) );

也可以参考activated()、toggleActionon

实例:action/toggleaction/toggleaction.cpp

QStringQAction::toolTip () const

返回操作的工具提示。详细情况请参考“toolTip”属性。

QStringQAction::whatsThis ()const

返回操作的“这是什么?”帮助文本。详细情况请参考“whatsThis”属性。


属性文档

QKeySequenceaccel

这个属性保存的是操作的快捷键。

键代码可以在Qt::KeyQt::Modifier中找到。这里没有默认快捷键。

通过setAccel()设置属性值并且通过accel()来获得属性值。

bool enabled

这个属性保存的是操作是否生效。

失效的操作不能被用户选择。它们不从菜单/工具条上消失,但是会以某种方式表面它们不可用,例如,它们也许被变灰。

失效操作上的“这是什么?”帮助还是由被设置的QAction::whatsThis属性提供。

通过setEnabled()设置属性值并且通过isEnabled()来获得到属性值。

QIconSeticonSet

这个属性保存的是操作的图标。

这个图标会用在工具条按钮和菜单中菜单文本的左面。这里没有默认图标。

(请参考action/toggleaction/toggleaction.cpp实例。)

通过setIconSet()设置属性值并且通过iconSet()来获得属性值。

QStringmenuText

这个属性保存的是操作的菜单文本。

如果操作备添加为菜单中的一个菜单选项将会由图标(如果有的话)、菜单文本和快捷键(如果有的话)组成。如果没有菜单文本在构造函数或者使用setMenuText()中明确设置,操作的描述文本将用来作为菜单文本。这里没有默认菜单文本。

也可以参考text

通过setMenuText()设置属性值并且通过menuText()来获得属性值。

bool on

这个属性保存的是切换按钮是否为开。

对于命令操作和QActionGroup这个属性总是开的(真),setOn()对于它们没有效果。对于为真的操作,这个属性的默认值是关(假)。

也可以参考toggleAction

通过setOn()设置属性值并且通过isOn()来获得属性值。

QStringstatusTip

这个属性保存的是操作的状态提示。

这个状态提示将会被显示在操作的顶级父窗口部件提供的所有状态条上。

如果没有状态提示被定义,操作使用工具条提示文本。

这里没有默认的状态提示。

也可以参考statusTiptoolTip

通过setStatusTip()设置属性值并且通过statusTip()来获得属性值。

QStringtext

这个属性保存的是操作的描述文本。

如果QMainWindow::usesTextLabel为真,文本将会作为相应工具按钮上的文本。如果没有菜单文本和工具条提示被定义,它也可以作为相应的默认文本。这里没有默认的文本。

也可以参考menuTexttoolTipstatusTip

通过setText()设置属性值并且通过text()来获得属性值。

bool toggleAction

这个属性保存的是操作是否是切换操作。

切换操作的状态为开/关中的一种。例如,“加粗”工具条按钮是开或者是开。不是切换操作的操作是命令操作,命令操作被简单执行。这个属性默认为假。

在一些情况下,切换操作的状态依赖于其它切换操作状态。例如,“左对齐”、“中间对齐”和“右对齐”切换操作是互斥的。为了达到互斥切换,把相关切换操作添加到QActionGroup中,并且把QActionGroup::exclusive属性设置为真。

通过setToggleAction()设置属性值并且通过isToggleAction()来获得属性值。

QStringtoolTip

这个属性保存得失操作的工具提示。

这个文本用于工具提示。如果没有状态提示被设置,工具提示会被用作状态提示。

如果没有指定工具提示,那么操作的文本被使用并且如果没有指定操作的文本没有被指定,那么描述文本将被用作工具提示。

这里没有默认工具提示文本。

也可以参考statusTipaccel

通过setToolTip()设置属性值并且通过toolTip()来获得属性值。

QStringwhatsThis

这个属性保存的是操作的“这是什么?”帮助文本。

“这是什么?”文本被用来提供操作的简要描述。这个文本中可以使用多信息文本(比如HTML标记——对于支持的标记得列表请参考QStyleSheet)。这里没有默认的“这是什么?”文本。

也可以参考QWhatsThis

通过 setWhatsThis()设置属性值并且通过 whatsThis()来获得属性值。


欢迎您使用http://Blogmove.cn提供的"博客搬家"和"博文三窟"服务.
<think> 用户正在询问QtQAction信号槽函数的使用方法。根据提供的引用内容,特别是引用[2]和引用[3],其中详细描述了QAction的信号与槽机制。 引用[2]明确指出QAction有一个triggered()信号,当用户触发该动作时会发出此信号。这个信号通常与QObject::connect()函数一起使用,以连接到一个槽函数执行相应操作。 引用[3]提到QAction类中有信号(Signals)和槽(Slots)部分,尽管具体内容需要查阅文档,但结合引用[2]可以确定triggered()是主要使用的信号。 用户可能需要一个具体的代码示例来演示如何连接QAction的信号到槽函数。我将提供一个简单的示例,展示创建QAction对象并连接其triggered信号到自定义槽函数的过程。 在Qt中,通常的步骤是: 1. 创建QAction对象 2. 设置QAction的属性(如文本、图标、快捷键等) 3. 使用connect()函数将QAction的triggered信号连接到目标槽函数 4. 将QAction添加到菜单或工具栏 需要特别注意信号和槽的参数匹配:triggered信号有一个可选的bool参数(表示是否被选中),但在大多数情况下可以忽略这个参数。 最后,我会生成几个相关问题来帮助用户深入学习QAction的使用。 </think> 在Qt中,`QAction`的信号槽机制是实现用户交互的核心,主要通过`triggered()`信号与槽函数连接来实现功能响应。以下是详细使用方法及代码示例: --- ### **QAction信号槽连接步骤** 1. **创建QAction对象** ```cpp QAction *openAction = new QAction("打开文件", this); // 创建带文本的QAction openAction->setIcon(QIcon(":/icons/open.png")); // 设置图标 openAction->setShortcut(QKeySequence::Open); // 设置快捷键Ctrl+O ``` 2. **连接信号与槽函数** ```cpp // 方式1:Qt4风格(需注意参数兼容性) connect(openAction, SIGNAL(triggered()), this, SLOT(onOpenTriggered())); // 方式2:Qt5/Lambda表达式(推荐) connect(openAction, &QAction::triggered, [=](){ qDebug() << "打开文件操作已触发"; // 执行具体业务逻辑... }); // 方式3:连接成员函数(带参数) connect(openAction, &QAction::triggered, this, &MainWindow::handleAction); ``` 3. **添加到界面组件** ```cpp menuBar()->addAction(openAction); // 添加到菜单栏 toolBar->addAction(openAction); // 添加到工具栏 ``` --- ### **关键信号说明** | 信号 | 触发条件 | 参数说明 | |------|----------|----------| | `triggered(bool checked = false)` | 用户通过点击/快捷键触发 | `checked`:若动作可勾选,返回当前状态 | | `toggled(bool checked)` | 可勾选动作状态改变时 | `checked`:新的勾选状态 | | `changed()` | 动作属性(图标/文本等)修改时 | 无参数 | > 💡 **注意**: > - `triggered()` 是最常用的信号,适用于按钮点击、菜单项选择等场景[^2] > - 若需要处理勾选状态(如复选框菜单),需先调用`setCheckable(true)`再连接`toggled()`信号[^3] --- ### **槽函数定义示例** ```cpp // 处理无参信号的槽函数 void MainWindow::onOpenTriggered() { QFileDialog::getOpenFileName(this, "选择文件"); } // 处理带checked参数的槽函数 void MainWindow::handleAction(bool checked) { if(checked) statusBar()->showMessage("功能已启用"); else statusBar()->showMessage("功能已禁用"); } ``` --- ### **实际应用场景** 1. **菜单项操作** ```cpp QMenu *fileMenu = menuBar()->addMenu("文件"); QAction *saveAction = fileMenu->addAction("保存"); connect(saveAction, &QAction::triggered, this, &MainWindow::saveFile); ``` 2. **工具栏按钮** ```cpp QToolBar *editToolBar = addToolBar("编辑"); QAction *copyAction = editToolBar->addAction(QIcon("copy.png"), "复制"); connect(copyAction, &QAction::triggered, clipboard, &QClipboard::copy); ``` 3. **右键菜单** ```cpp void CustomWidget::contextMenuEvent(QContextMenuEvent *event) { QMenu menu(this); QAction *zoomAction = menu.addAction("放大视图"); connect(zoomAction, &QAction::triggered, this, &CustomWidget::zoomIn); menu.exec(event->globalPos()); } ``` --- ### **常见问题解决** 1. **信号未触发** - 检查`QAction`是否添加到可见组件(如菜单/工具栏) - 确认父对象生命周期有效(避免野指针) 2. **带参数槽函数不执行** ```cpp // 错误:Lambda参数与信号不匹配 connect(action, &QAction::triggered, [](bool checked){...}); // triggered()无参数! // 正确:显式忽略参数 connect(action, &QAction::triggered, [=](){...}); ``` > 通过合理使用信号槽机制,`QAction`可统一管理菜单、工具栏、快捷键的交互逻辑,大幅提升代码复用性[^2][^3]。 --- ### 相关问题 1. QAction的`triggered()`和`clicked()`信号有何区别? 2. 如何实现QAction的禁用/启用状态动态切换? 3. Qt6中信号槽连接方式有哪些改进? 4. 如何处理QAction在多窗口场景下的信号冲突? [^1]: Qt 中处理 QAction 信号与槽机制解析 [^2]: QT 中的QAction详解及应用场景 [^3]: QtQAction类信号槽系统说明 [^4]: Qt菜单与信号槽连接实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值