qt中qaction用来抽象的表示一个动作,它包括行为、属性等参数。比较特殊的就是这个去action是随着不同的宿主而自动产生变化去适应的。下面会说到。
qmenu是qt中菜单,按理说在这之前应该先存在一个qmenubar,的确,只不过在qmainwindow的头文件中已经默认了一个menuBar函数,当mainwindow中不存在menubar时该函数会自动创建并(如果menubar已经存在则直接)返回一个menubar的指针,我们通过这个指针来对菜单栏进行操作,比如添加一个菜单项我们可以这样:
// QMenu *file = menuBar()->addMenu(tr("&file"));//QMainWindow中的menubar函数返回创建好的menubar的指针,可分解为如下两行
QMenuBar *mymenubar=menuBar();
QMenu *file =mymenubar->addMenu("file");
上面一行和下面两行的作用是一样的。此时我们通过(假设openAction是预先定义好的一个QAction实例)
file->addAction(openAction);
将openAction动作加入到file菜单中,他就成了file下的一个可执行动作(Open...)
现在来创建一个toolbar
QToolBar *toolBar = addToolBar(tr("&tool"));//QMainWindow中默认创建了一个toolbar
toolBar->addAction(openAction);
只不过这次是把openAction动作添加到工具栏中,那它将会是这个样子
这就是最开始提到的qaction动作会随着宿主的不同而自动适应去变化。
注:
1.菜单栏包括n个菜单,每个菜单又包含n各动作,所以创建菜单栏后-创建菜单-创建动作。
工具栏没有二级菜单,所以动作直接通过按钮的样式显示在toolbar上,也就是创建工具栏后-创建动作。
2.创建子菜单的方法:
QMenuBar *mymenubar=menuBar();
QMenu *file =mymenubar->addMenu("file");
QMenu *subfile =file->addMenu("subfile");
QMenu *sub2file =subfile->addMenu("subfile");
其中file是在菜单栏上的一级菜单,subfile是file中的子菜单,而sub2file则又是subfile的子菜单,结构如图所示