Qt之QToolBar 获取QAction位置以及设置QToolBar样式

44 篇文章 ¥29.90 ¥99.00
QToolBar中的QAction由于是抽象类型,无法直接获取位置信息,需要通过QToolBar来获取其布局详情。同时,介绍了如何定制QToolBar的显示样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

        QAction只是一个抽象的类型不是实体,所以没有具体的位置信息,想要获取QToolBar上的各个QAction区域信息还得靠QToolBar本身。

QAction位置

// 获取信号发送对象
QAction *p = qobject_cast<QAction *>(sender());
QRect rect = ui->mainToolBar->actionGeometry(p);

QToolBar样式

/***********QToolBar*************/
QToolBar {
    padding: 1px;
    min-width: 90px;
}
QToolBar::separator{
    height:1px;
    background-color: rgba(255, 255, 255, 0.4);
}
QToolBar QToolButton{
    min-width: 80px;
    background-color: transparent;
}
QToolBar QToolButton:hover{
    background-color: rgba(255, 255, 255, 0.1);
}
QToolBar QToolButton:pressed{
    background-color: rgba(255, 255, 255, 0.15);
}
/*********************************/

### 如何从 QToolBar 获取与某个 QAction 关联的 QToolButton 在 PyQtQt 的开发过程,可以通过遍历 `QToolBar` 上的所有子部件来找到与特定 `QAction` 关联的 `QToolButton`。以下是实现这一功能的具体方法: 通过调用 `QToolBar.widgetForAction(action)` 方法可以直接返回与指定 `QAction` 对应的 `QToolButton` 实例[^2]。 如果需要手动实现此过程,则可以利用以下逻辑: 1. 遍历 `QToolBar` 的所有子部件。 2. 判断这些子部件是否为 `QToolButton` 类型。 3. 调用 `QToolButton.defaultAction()` 来验证该按钮绑定的动作是否为目标 `QAction`。 #### 示例代码 ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QToolButton app = QApplication([]) class MainWindow(QMainWindow): def __init__(self): super().__init__() toolbar = QToolBar() self.addToolBar(toolbar) action_smile1 = QAction("Smile1", self) action_smile2 = QAction("Smile2", self) toolbar.addAction(action_smile1) toolbar.addAction(action_smile2) # 获取action_smile1 关联的 QToolButton tool_button = toolbar.widgetForAction(action_smile1) # 使用 widgetForAction 方法 if isinstance(tool_button, QToolButton): print(f"Found Tool Button with text: {tool_button.text()}") window = MainWindow() window.show() app.exec_() ``` 上述代码展示了如何使用 `widgetForAction` 方法直接定位到目标 `QToolButton` 并打印其文本属性。 此外,在某些情况下可能无法直接依赖于 `widgetForAction` 方法(例如自定义工具栏布局),此时可采用迭代法逐一检查每个 `QToolButton` 是否匹配给定的 `QAction`[^4]。 ### 注意事项 当尝试访问或修改由标准框架创建的对象时,请始终确认当前环境支持所选操作模式,并注意不同版本间 API 行为可能存在差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ilson_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值