目录}

  • 前言
  • 正言
    • 误区
    • 正解

前言

这个需求耗费了我至少一个下午的时间,明明就是很简单的功能,但就是四笔实现不了,最终终是实现了,这里做一个记录。

正言

首先,先上效果图:

就是我上面画横线的地方,就是我最终要移过去的Action。
如果你们懒得看我的误区,就直接看正解即可,但我觉得误区这里还是值得看一下的。

误区

首先,最上面这个是QMenuBar。我这四个都是QAction。都是直接使用QMenuBar->addAction()就可以实现弄上去了。但问题来了,我现在要让其中的三个靠右啊?
首先,之前想的一直是将这几个Action加入布局之中,然后中间放一个弹簧就可以了,但这种方式最终是失败了。好像只要把这个Action放入布局之中, 我的最右边的那几个Action就会失效看不到了。这种方法这样就失败了。

正解

接下来列下几种解决的办法,但最前面的几种肯定是有它的局限性,所以我最后没有采用,不然,前面几种还是挺容易的。

  1. 首先,我弄了一个QWidget和一个QHBoxLayout,我把那最右边的三个QAction都加入这个QHBoxLayout之中,然后加入这个QWidget之中,这样,这三个QAction就被我圈在一起了,然后,我就使用QMenuBar->setConnerWidget(),将这个widget加入到这个QMenuBar之中了。这样,我们可以实现基本的效果,没啥问题。
  2. 但接下来,我又发现,不行啊,这样加的话,你的这个QMenuBar是没办法进行拖动,就类似你要拖动这个窗口,但点击这个QMenuBar是会拖动失败的,很难受,原因在这:就是当你将QMainWindow的最上层的title去掉之中,这个QMainWindow会失去它原来的属性,就是没办法进行拖动,放大缩小,这部分内容,我会在另一篇文章讲,但即使你实现了其他部分的放大缩小,这个地方也没有办法解决,因为这个地方它就是无法聚集到焦点。所以,我的解决办法如下:
    我最终还是选择使用QToolBar来作为这个界面的最上层,不然,实在搞不了啊。
    首先,我们使用了QToolBar来弄,那最前面的那个QMenu怎么办,我也找不到比较好的方法在QToolBar中来实现,最后,我使用的方法是:

自己new一个QMenuBar,然后将这个QMenu加入,然后,将这个QMenuBar加入到QToolBar的布局之中,放在最前面。
将一个可无限延伸的QWidget加入在中间进行撑开:`QWidget *spacer = new QWidget(this);
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
然后剩下就将最右边的那几个按钮逐一加入到QToolBar之中即可,这方法可行。然后,你的QMenuBar还要调整一下长度,不然,你的QMenuBar如果太长也是拖动不了。这个长度的设置方式为:
QMenuBar *menuBar = new QMenuBar();menuBar->setFixedWidth(70);

这样,最终就可以实现想要的效果了。 关于这个QToolBar的下面放QMenuBar的代码如下:

QToolBar *menuToolBar = this->addToolBar("MenuToolBar");menuToolBar->setProperty("class","menuToolBarQss");menuToolBar->setStyleSheet("border:none");menuToolBar->setMovable(false);QMenuBar *menuBar = new QMenuBar();menuBar->setFixedWidth(70);menuBar->setProperty("class","m_pMenuBarQss");m_pFileMenu = new QMenu("File");QAction *m_pActionSaveParameter = m_pFileMenu->addAction("Save Parameter");m_pActionSaveParameter->setProperty("class","m_pActionSaveParameterQss");menuBar->addMenu(m_pFileMenu);menuToolBar->addWidget(menuBar);QWidget *spacer = new QWidget(this);spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);menuToolBar->addWidget(spacer);QAction *m_pActionMinWidget = new QAction(this);m_pActionMinWidget->setToolTip("Min Widget");m_pActionMinWidget->setIcon(QIcon("./icon/white_minWidget.png"));                     //设置图标,冒号表示该文件处于资源文件指定的地方menuToolBar->addAction(m_pActionMinWidget);m_pActionMaxWidget = new QAction(this);m_pActionMaxWidget->setToolTip("Max Widget");                                       //信息提示,当鼠标靠近这个项,便会提示信息m_pActionMaxWidget->setIcon(QIcon("./icon/white_maxWidget.png"));                     //设置图标,冒号表示该文件处于资源文件指定的地方menuToolBar->addAction(m_pActionMaxWidget);QAction *m_pActionCloseWidget = new QAction(this);m_pActionCloseWidget->setToolTip("Close Widget");                                   //信息提示,当鼠标靠近这个项,便会提示信息m_pActionCloseWidget->setIcon(QIcon("./icon/white_closeWidget.png"));menuToolBar->addAction(m_pActionCloseWidget);this->addToolBarBreak();

如何让MenuBar的菜单栏靠右对齐?相关推荐

  1. word公式编号怎么右对齐_8个能帮你大忙的Word技巧,建议花几分钟学起来!

    一.排版技巧 1.页面布局 Word文档中,有一个[页面布局]设置,大家可以通过这个设置来排版哦.在[页面布局]中,大家可以完成这些操作:纸张方向.文字方向.页边距.分栏等等,另外大家还可以直接在里面 ...

  2. 【问题处理】Word修改页边距后,目录没有右对齐

    1.问题描述:Word将普通边距修改为窄边距之后,目录没有右对齐 1)普通边距下的目录如图所示: 2)修改为窄边距之后的目录如图所示: 2.问题解决方法: 1)菜单栏选择:"引用" ...

  3. 论文中公式居中编号右对齐以及左下角基金的插入方法

    记性不好,每次用到都现搜一遍,想记下来方便以后查阅 (1)公式居中,编号右对齐 菜单栏:视图--标尺,调出标尺 光标停于公式行使公式居中,在标尺上标记公式左侧位置,并在右侧标记编号位置(下图 是公式编 ...

  4. mathtype中手工实现公式编号右对齐及快捷键

    转自:http://blog.sina.com.cn/s/blog_656681710100l3it.html (转自:http://klqingshui.blog.163.com/blog/stat ...

  5. python使用wx绘界面,布局自已的toolbar,使控件右对齐

    正确的右对齐方法: panel = wx.Panel(self) button = wx.Button(panel, label = _(u'确定'), size = (60, 28))hbox = ...

  6. html中li右对齐的方法

    负责的系统中有一个横向的菜单栏,七八个项挨个排在一起,是一个个<li>的结构.今天想在这个菜单栏里增加一个"帮助"链接,因为功能的分类不同,所以希望这个帮助链接虽然也在 ...

  7. input type右对齐与只读的

    右对齐的 <input type="text" style="background:'#efefef'; text-align:right" readon ...

  8. R语言ggplot2可视化使用vjust和hjust参数对齐图像中的文本注释信息(左对齐、右对齐、居中)实战

    R语言ggplot2可视化使用vjust和hjust参数对齐图像中的文本注释信息(左对齐.右对齐.居中)实战 目录

  9. 将选定的文本对象左对齐、右对齐或对中

    ;; ;;程序名称:对象水平对齐程序 ;;执行命令:TXTAL ;;程序功能:将选定的对象左对齐.右对齐或对中. ;; (defun c:TXTAL(/ selobjs oldcmdecho) ;定义 ...

最新文章

  1. 5G时代渐行渐近 移动承载网络面临新挑战
  2. angularjs 导出excel php,AngularJS 导出Excel指令
  3. MySQL优化调优有没有做过_MySQL 调优/优化的 100 个建议
  4. Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)
  5. /usr/include/pcap/pcap.h源码
  6. 托马斯微积分10版积分简表101 公式修正
  7. MATLAB拟合函数
  8. vue3快速上手(尚硅谷视频笔记)
  9. js文本框设置必填项_显示隐藏js字段 设置必填非必填
  10. coreldraw x4被禁用怎么解决及不能使用序列号警告办法
  11. 解决Github下载速度慢的问题
  12. JAVA宠物爱心驿站计算机毕业设计Mybatis+系统+数据库+调试部署
  13. 拼多多店铺流量解析:这些流量入口你必须了解!
  14. PostgreSQL安装、验证安装、pgAdmin初步简单使用
  15. 计算机主板设计与应用说明,电脑主板的主要参数及其含义介绍
  16. php 读取mysql 返回xml_用php解析xml并保存到mysql
  17. LINUX新手入门及安装配置FAQ(http://bbs.blueidea.com/viewthread.php?tid=635906amp;page=)
  18. 坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享
  19. 在体育方面计算机的应用,计算机技术在高校体育教学中的应用
  20. 程序员的内斗: 测试和开发干仗, 已经到用鼠标线勒脖子的程度

热门文章

  1. 二分查找的魔鬼细节详解
  2. 几何画板真的这么好用吗
  3. 血缘服务器维护,维护家庭和睦的几个关键
  4. mldonkey安装
  5. 一款功能强大的IP查询工具!
  6. Python中print(f‘***‘)中f是什么意思
  7. 愿天下团圆,愿天下再无团圆
  8. 1455:【例题1】Oulipo——字符串哈希
  9. Oracle 300问
  10. linux双系统的启动,解决Linux双系统安装卡在启动LOGO