项目中我们有时会遇到无子菜单的顶层菜单需要响应单击事件,查找了半天也没找到好方法,参考https://blog.csdn.net/huangxilong79/article/details/88953018的"QT顶层菜单事件响应”,照着文章中的做最终没有解决,通过研究ui_XXX.h(XXX为你建立的ui文件名)文件后,最终找到一个方法,譬如我建立的ui类为WSPipe,顶部菜单名称为计算器,方法如下:
在ui_XXX.h文件进行如下修改:
class Ui_WSPipe
{
public:
/**原有代码**/
QAction* calculate;//新增代码
void setupUi(QMainWindow *WSPipe)//原有UI设置函数
{
/**原有代码**/
calculate= new QAction(QStringLiteral("计算器"), WSPipe);//新增代码
calculate->setObjectName(QStringLiteral("calculate"));//新增代码
menubar->addAction(calculate);//新增代码,当在menubar的最后插入新子项使用addAction()
menubar->insertAction(menu_2,calculate);//新增代码,当在menubar的menu_2菜单前插入新子项使用insertAction(),与addAction()使用一个即可
retranslateUi(WSPipe);/**原有代码**/
QMetaObject::connectSlotsByName(WSPipe);/**原有代码**/
}
在XXX.h文件进行如下修改:
class WSPipe : public QMainWindow
{
/**原有代码**/
private slots:/**原有代码**/
void on_calculate_triggered();//新增代码,手动连接槽函数
private:/**原有代码**/
Ui::WSPipe ui;/**原有代码**/
};
在XXX.cpp文件进行如下修改:
增加响应函数:
void WSPipe::on_calculate_triggered()
{
//点击该菜单的操作内容。
}