需求场景:
在qt界面中,需要给菜单添加响应动作。
实现:
查看了QMenu
对象源码,没有找到类似QPushButton.clicked()
的信号函数。只发现了QMenu.triggered()
函数,已经常用的QMenu.addAction()
。就是说,只能通过triggered
触发出菜单列表,在菜单列表中添加QAction()
,使用QAction()
关联对应的槽函数,实现操作响应。
具体实现:
- qt界面中的控件关联关系:
# UI 关联
menuBar = QtWidgets.QMenuBar() # 菜单栏
menuBar.setGeometry(QtCore.QRect(0, 0, 1245, 23))
menuBar.setObjectName("menuBar")
menu = QtWidgets.QMenu() # 菜单按钮
menu.setObjectName("menu")
menu_check = QtWidgets.QMenu(menuBar)
menu_check.setObjectName("menu_check")
actionSavePicture = QtWidgets.QAction() # 动作响应,修改存放路径
actionSavePicture.setObjectName("actionSavePicture")
menu.addAction(actionSavePicture) # 菜单按钮添加动作
- 后端响应代码中的信号槽关联
actionSavePicture.triggered.connect(changeImgSavePath)
def changeImgSavePath():
# 获取目录路径
save_path = QFileDialog.getExistingDirectory(None, caption='选择截图存放目录')
if save_path:
img_save_path = save_path
cam_conf = CameraConfig()
cam_conf.img_save_path = save_path
cam_conf._update_cfg_file()
QMessageBox.about(None, '提示', f'截图存放目录变更为:{save_path}')
else:
QMessageBox.about(None, '提示', '截图存放目录未变更')