网站的网络营销推广方案,义乌网站制作公司,电子商务平台是什么,成都企业网站制作哪家好Qt窗口
概念简述
与QWidget的区别#xff1a;
QWidget更多是作为一个窗口的一部分
基本结构构成#xff1a;以Xshell举例子比较菜单栏和工具栏#xff1a;
菜单栏#xff1a;工具栏#xff1a;工具栏本质是把菜单栏中一些比较常用的选项#xff0c;直接放到工具栏中…Qt窗口
概念简述
与QWidget的区别
QWidget更多是作为一个窗口的一部分
基本结构构成以Xshell举例子比较菜单栏和工具栏
菜单栏工具栏工具栏本质是把菜单栏中一些比较常用的选项直接放到工具栏中直接点击工具栏中的按钮就可以快速生效
菜单栏的使用这里需要选择QMainWindow
通过ui文件创建菜单
创建好文件之后打开ui文件会与之前的发生不同如这里的“在这里输入”这样就可以创建菜单了
创建好菜单栏想要创建菜单项会出现bug无法直接输入中文可以通过复制粘贴的方式进行如在记事本中输入文本再次粘贴到对话框中
运行结果如下使用代码的方式创建菜单结构
代码如下
//1.创建一个菜单栏QMenuBar*menuBarnew QMenuBar();this-setMenuBar(menuBar);//2.创建菜单QMenu*menu1new QMenu(文件);QMenu*menu2new QMenu(编辑);QMenu*menu3new QMenu(视图);menuBar-addMenu(menu1);menuBar-addMenu(menu2);menuBar-addMenu(menu3);//3.给菜单添加菜单项QAction*action1new QAction(新建);QAction*action2new QAction(打开);QAction*action3new QAction(保存);QAction*action4new QAction(另存为);QAction*action5new QAction(退出);menu1-addAction(action1);menu1-addAction(action2);menu1-addAction(action3);menu1-addAction(action4);menu1-addAction(action5);运行结果如下如何让点击菜单项有反应
可以给用户添加信号槽
//4.给action添加信号槽connect(action1,QAction::triggered,this,MainWindow::handle);connect(action5,QAction::triggered,this,MainWindow::close);运行结果如下菜单添加快捷键
设置好快捷键可以结合alt使用
代码如下并不会在窗口上显示
代码如下
QMenuBar*menuBarnew QMenuBar();this-setMenuBar(menuBar);QMenu*menu1new QMenu(文件(F));QMenu*menu2new QMenu(视图(V));menuBar-addMenu(menu1);menuBar-addMenu(menu2);QAction*action1new QAction(action1(Q));QAction*action2new QAction(action2(W));QAction*action3new QAction(action3(E));QAction*action4new QAction(action4(R));menu1-addAction(action1);menu1-addAction(action2);menu2-addAction(action3);menu2-addAction(action4);connect(action1,QAction::triggered,this,MainWindow::handle1);connect(action2,QAction::triggered,this,MainWindow::handle2);connect(action3,QAction::triggered,this,MainWindow::handle3);connect(action4,QAction::triggered,this,MainWindow::handle4);添加子菜单
运行结果添加分割线
运行结果添加图标
代码如下
QMenuBar*menuBarnew QMenuBar();this-setMenuBar(menuBar);QMenu*menunew QMenu(菜单);menuBar-addMenu(menu);QAction*action1new QAction(菜单项1);action1-setIcon(QIcon(:/open.png));QAction*action2new QAction(菜单项2);action2-setIcon(QIcon(:/save.png));menu-addAction(action1);menu-addAction(action2);运行结果如下如果给菜单设置图标呢
此时只会显示图标文字会被覆盖关于创建MenuBar的讨论
QMenuBar*menuBarnew QMenuBar();this-setMenuBar(menuBar);如果没有点击自动勾选ui,此代码是OK如果勾选则会造成内存泄漏之前的程序已经自己创建了一个对象当自己通过代码设置的时候旧的会从对象树上脱离导致资源泄漏
如果关闭的话对象树会结束此进程也会结束不会造成影响但是如果频繁切换窗口会有问题
更规范的写法
QMenuBar*menuBarthis-menuBar();如果存在直接返回不存在会创建新的再返回
如果在以后工作中遇到嵌入式内存很有限可能就不能够泄漏内存