这里简要介绍了什么是QMenuBar、QMenu和QAction。 本文不介绍其详细功能。 还不认识的人,请参阅Qt的帮助手册或其他相关博客。 如下图所示,软件的蓝色条是QMenuBar用于装载QMenu的。 红色条中的“文件、编辑、构建……”是QMenu,每个QMenu展开的粉红色框中可以看到的都是QAction,单击粉红色框,可以看到绑定到相应QAction的插槽函数
在此插入图像说明
他们的关系在框图上大致是这样的。 (允许的绘画水平)。 一个QMenuBar可以有多个QMenu,一个QMenu可以有多个QAction,每个QAction都可以对应多个类成员函数。 (图中只画了与一个函数对应的情况。
在此插入图像说明
ok,简单的介绍到此结束。 现在进入正文。 QMenuBar易于使用,但存在一定的缺陷,不能像Map、Vector、List等容器那样查找并返回自己的“子节点”。 写这篇文章的目的首先是为了解决QMenuBar没有正确地确定任一个QMenu或QAction的函数接口; 第二,做笔记。 我害怕自己会忘记。 别多嘴,直接贴代码。
1、码键片段#
头文件uart_tools_mainwindow.h中QMenuBar的重要部分代码。
//uart_tools_mainwindow.h
class uart_tools_mainwindow;
类型定义结构{
q动作*动作_ p;
QString name;
void (UART _ tools _ main window :3360 * func );
}main_menu_action;
类型定义结构{
QMenu * menu_p;
QString menu_name;
list main _ menu _ action actions _ list;
}main_menu;
class UART _ tools _ main window : publicqwidget
{
Q_OBJECT
.
.
.
隐私:
//------------- member
//Menu bar
QMenuBar * mainwindow_menubar;
list main _ menu min window _ menu _ list;
//------------- functions
voidshow_connect_window(void );
voidconnect_C0_reconnect(void );
voidconnect_C0_disconnect(void;
(;
源文件uart_tools_mainwindow.cpp中有关QMenuBar的重要部分代码。
this-main window _ menubar=newq menubar (;
this-main window _ menubar-setparent (this;
main_menu tmp_menu; main_menu_action tmp_action; tmp_menu.menu_name='Connect '; tmp _ menu.menu _ p=this-main window _ menubar-addmenu (tmp _ menu.menu _ name ); tmp_action.name='Serial '; tmp _ action.action _ p=tmp _ menu.menu _ p-addaction (tmp _ action.name ); tmp _ action.func=UART _ tools _ main window :3360 show _ connect _ window; tmp _ menu.actions _ list.insert (tmp _ menu.actions _ list.length () 1,tmp_action ); tmp_action.name='Reconnect '; tmp _ action.action _ p=tmp _ menu.menu _ p-addaction (tmp _ action.name ); tmp _ action.func=UART _ tools _ main window 33603360 connect _ c0 _ reconnect; tmp _ menu.actions _ list.insert (tmp _ menu.actions _ list.length () 1,tmp_action ); tmp_action.name='Disconnect '; tmp _ action.action _ p=tmp _ menu.menu _ p-addaction (tmp _ action.name ); tmp _ action.func=UART _ tools _ main window 33603360 connect _ c0 _ disconnect; tmp _ menu.actions _ list.insert (tmp _ menu.actions _ list.length () 1,tmp_action ); this-main window _ menu _ list.insert (this-main window _ menu _ list.length () 1,tmp_menu ); this-main window _ menubar-add separator (; //Easy to connect signal and slot
for (qlistmain _ menu :3360 iterator menu _ I=this-main window _ menu _ list.begin ); menu _ I this-main window _ menu _ list.end (; menu_i
if () menu_p ).menu_p )
for(intaction_I=0; action_I(*menu_I ).actions_list.size ); action_I({ ()
if () menu_I ).actions_list.at ) action_I ).func ) {
qobject:3360connect (() *menu_i ).actions_list.at ) action_p ).action_p ),qaction33603360triggerer
}
}
}
}
//endofeasytoconnectsignalandslot
//setmenubarandmenubackgroundcolorthis-main window _ menubar-set style sheet (qmenubar.item ) background-color 3360 } () ); this-mainwindow_menubar-show (; 2、运行结果展示#
该软件本身实现了串行端口连接的功能。 这意味着通过串行端口连接到目标板,进入shell命令行,然后使用shell命令进行操作。
在此插入图像说明
作者: Imagine Miracle
来源: https://www.cn blogs.com/imagine miracle-wxn/p/Qt _ qmenubar _ im _ shell.html
版权:使用“签名-非商业使用-以相同方式使用4.0国际”许可协议许可本作品。