QT工具栏按钮

工具栏按钮:

采用ToolBar直接建立工具栏按钮,一般一排连续的几个按钮可使用一个ToolBar的不同Action进行分配,一个Action对应着一个按钮;若是有两个ToolBar,则之间会有分隔(竖线右侧带点),属于不同的两部分。此外还可以通过toolBar->addSeparator添加分隔符,将不同操作分开。

按钮的图标可通过Action进行插入,注意图片要先导入资源中,再输入资源的路径进行调用,如:

添加Action时可通过toolBar->addAction的返回值进行新Action的创建,依照addAction的顺序确定了工具栏按钮的左右顺序。最后,通过点击可发出triggered()信号,进而连接槽函数,执行相应操作。

工具栏菜单:

采用ToolButton作为外观,通过toolBar->addWidget()添加到工具栏中,菜单部分需要单独建立一个QMenu,进行选项设计以及信号连接,再通过toolButton->setMenu()将菜单添加到按钮中,这样点击按钮之后就可以弹出菜单,弹出延时可通过toolButton->setPopupMode()进行设置。

QMenu的选项可通过QActionGroup进行设计,QActionGroup每添加(addAction)一个新的Action,菜单中就会添加一个选项;点击菜单中的选项可发出triggered(QAction*)的信号,连接到槽函数中,通过QActionGroup *group = qobject_cast<QActionGroup*>(sender());进行信号的接收,再由group->actions().indexOf(act)(act是传入的QAction*)获取选项的索引(也就是第几项),继而进行自己的操作。

原文:https://blog.youkuaiyun.com/huster_xdw/article/details/83375505 
 

### 实现Qt工具栏按钮互斥 为了实现在Qt工具栏中的按钮互斥功能,可以利用`QActionGroup`来管理一组动作(即按钮),并设定这些动作为互斥模式。具体来说,在创建一系列用于放置于工具栏上的`QAction`对象之后,将它们加入同一个`QActionGroup`实例内,并设置此组为互斥状态。 对于希望直接通过自定义组件实现类似效果的情况,则可以通过继承`QWidgetAction`类来自定义行为逻辑[^1]。不过针对简单的互斥需求而言,推荐采用官方提供的更简便的方式——借助`QActionGroup`完成操作分组与互斥控制。 下面是一个基于PyQt5框架下的简单例子展示如何配置具有互斥特性的工具栏按钮: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QActionGroup class MainWindow(QMainWindow): def __init__(self): super().__init__() toolbar = QToolBar("My main toolbar") self.addToolBar(toolbar) action_group = QActionGroup(self) action_group.setExclusive(True) # 设置为互斥模式 actions = [] for i in range(3): action = QAction(f'Option {i}', self) action.setCheckable(True) # 让动作可选中 action.setData(i) # 给每个动作附加数据 action.triggered.connect(lambda checked, a=action: print(a.text())) actions.append(action) toolbar.addAction(action) action_group.addAction(action) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 上述代码片段展示了怎样构建一个包含三个选项的工具栏,并使这三个选项之间形成互斥关系。每当用户点击其中一个选项时,其他已被选中的项会自动取消选中状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值