精华内容
下载资源
问答
  • Android仿微信底部菜单栏+顶部菜单栏(附源码)

    千次下载 热门讨论 2015-03-07 23:11:29
    Android仿微信底部菜单栏+顶部菜单栏,效果看博文http://blog.csdn.net/evankaka/article/details/44121457
  • 工作要求,需要在程序中展示Excel文件的数据,但是不能显示出菜单栏、工具栏,只需要展示数据。 看似简单的一个要求,却着实费了不少功夫,网上大多的资料都是office2003的版本适用,2007及以上的版本无法隐藏菜单栏...
  • 本demo所需技术:jQuery+Bootstrap 本demo所用工具:IDEA 本demo主要实现功能: 1. 左侧菜单栏切换右侧页面内容 2. boostrap弹框内容的显示
  • android底部菜单栏demo

    千次下载 热门讨论 2012-07-13 19:49:11
    android底部菜单栏demo
  • Android仿微信下拉列表实现(加顶部菜单栏和底部菜单栏),具体看博文blog.csdn.net/evankaka/article/details/44179321
  • NavigationView实现侧滑菜单栏

    千次下载 热门讨论 2015-07-11 19:04:29
    将介绍使用Google最新推出规范式设计中的NavigationView和DrawerLayout结合实现侧滑菜单栏效果
  • 工具菜单栏图标集

    热门讨论 2011-12-14 15:46:47
    应用程序的各种图标,工具栏、菜单栏上的那种,添加、修改、删除、打印、导出.....等,非常齐全,作 Winform 开发的一定用得作。
  • 实现Android底部菜单栏效果(源码)

    热门讨论 2013-05-29 22:00:58
    用两种不同的方式实现了Android底部菜单栏的效果(也叫Tab选项卡)
  • 实现顶部一级菜单和左侧二级菜单进行响应,选哪个一级菜单时,左侧菜单栏有相对应下的二级菜单,产生联动效果。然后选不同的二级菜单,主体内容区域展示对应内容。 二、效果图 三、具体操作实现 1、用 vue-...

    一、目的

    后台管理系统页面的整体结构如图:

    实现顶部一级菜单和左侧二级菜单进行响应,选哪个一级菜单时,左侧菜单栏有相对应下的二级菜单,产生联动效果。然后选不同的二级菜单,主体内容区域展示对应内容。

    二、效果图

    后台管理系统模板源码的 github 地址:https://github.com/hxhpg/vue-secondMenu-test

    三、具体操作实现

    1、用 vue-cli 创建的 Vue 项目后,自己再手动搭建项目的基本目录结构,如图:

    2、创建一个公共组件 Whole.vue 来实现整体页面结构的布局,通过 div 来进行区域定位和大小设定。

    使用 el-menu 组件的 mode 属性为 "horizontal" 来使导航菜单变更为水平模式。

    @select="handleSelect" 来切换不同的一级菜单展示不同的二级菜单栏和主体内容区域,用 router-view 通过路由来进行组件页面跳转,代码如下:

    <template>
    <div class="wrapper">
    <!-- 页面头部部分 -->
        <div class="header">
            <div class="logo">后台管理系统</div>
            <!-- 水平一级菜单 -->
            <div style="float:left;">
                <el-menu :default-active="toIndex()" mode="horizontal" @select="handleSelect">
                <template v-for="item in items">
                    <el-menu-item :index="item.index" :key="item.index">
                    <template slot="title">
                        <span slot="title">{{ item.title }}</span>
                    </template>
                    </el-menu-item>
                </template>
                </el-menu>
            </div>
    
            <div class="header-right">
                <div class="header-user-con">
                    <!-- 用户头像,根据需要自行修改图片路径 -->
                    <div class="user-avator"><img src="../../assets/img/img.jpg" /></div>
                    <!-- 用户名下拉菜单 -->
                    <el-dropdown class="user-name" trigger="click" @command="handleCommand">
                        <span class="el-dropdown-link">
                            {{ username }}
                            <i class="el-icon-caret-bottom"></i>
                        </span>
                        <el-dropdown-menu slot="dropdown">
                            <el-dropdown-item disabled>修改密码</el-dropdown-item>
                            <el-dropdown-item command="loginout">退出登录</el-dropdown-item>
                        </el-dropdown-menu>
                    </el-dropdown>
                </div>
            </div>
        </div>
        
        <!-- 页面左侧二级菜单栏,和主体内容区域部分 -->
        <el-main>
            <router-view></router-view>
        </el-main>
    
    </div>
    </template>
    
    <script>
    export default {
        data() {
            return {
                items: [    // 水平一级菜单栏的菜单
                    { index: 'Home', title: '首页' },
                    { index: 'test1', title: '一级菜单1' },
                    { index: 'test2', title: '一级菜单2' },
                    { index: 'test3', title: '一级菜单3' },
                    { index: 'permission', title: '管理员权限' },
                ]
            }
        },
        computed: {
            username() {
                let username = localStorage.getItem('ms_username');
                return username ? username : this.name;
            }
        },
        methods:{
            // 根据路径绑定到对应的一级菜单,防止页面刷新重新跳回第一个
            toIndex() {
                return this.$route.path.split('/')[1];
            },
            // 切换菜单栏
            handleSelect(index) {
                this.$router.push('/' + index);
            },
            // 用户名下拉菜单选择事件
            handleCommand(command) {
                if (command == 'loginout') {
                    localStorage.removeItem('ms_username');
                    this.$router.push('/login');
                }
            }
        }
    }
    </script>
    
    <style scoped>
    .wrapper {
        width: 100%;
        height: 100%;
        background: #f0f0f0;
    }
    .header {
        position: relative;
        box-sizing: border-box;
        width: 100%;
        height: 70px;
        font-size: 22px;
    }
    .header .logo {
        float: left;
        margin-left: 60px;
        margin-top: 17.5px;
        height: 29px;
        width: 160px;
        vertical-align: middle;
    }
    /* --------------- 用户头像区域的样式 ---------------- */
    .header-right {
        float: right;
        padding-right: 50px;
    }
    .header-user-con {
        display: flex;
        height: 70px;
        align-items: center;
    }
    .user-avator {
        margin-left: 20px;
    }
    .user-avator img {
        display: block;
        width: 40px;
        height: 40px;
        border-radius: 50%;
    }
    .user-name {
        margin-left: 10px;
    }
    .el-dropdown-link {
        cursor: pointer;
    }
    .el-dropdown-menu__item {
        text-align: center;
    }
    /* --------------- 水平一级菜单栏的样式--------------------- */
    .el-menu.el-menu--horizontal {
        border-bottom: none !important;
        float: left;
        margin-left: 50px;
    }
    .el-menu--horizontal > .el-menu-item.is-active {
        border-bottom: 2px solid #409eff;
        color: #3989fa;
        font-weight: 700;
    }
    .el-menu--horizontal > .el-menu-item {
        font-size: 16px;
        margin: 0 15px;
        color: black;
    }
    </style>

    3、这样就把页面顶部的一级菜单栏展现出来了。接下来要封装一个左侧二级菜单栏的组件 SideMenu.vue ,设定 props 是让调用该组件时把传递的值获取到。代码如下:

    <template>
        <div class="sidebar">
        <!-- 左侧二级菜单栏的组件封装 -->
            <el-menu
                class="sidebar-el-menu"
                :default-active="toIndex()"
                background-color="white"
                text-color="#7a8297"
                active-text-color="#2d8cf0"
                router>
                <template v-for="item in items">
                    <el-menu-item :index="item.index" :key="item.index">
                        <!-- 需要图标的在 item 对象中加上属性 icon -->
                        <!-- <i :class="item.icon"></i> -->
                        <span slot="title">{{ item.title }}</span>
                    </el-menu-item>
                </template>
            </el-menu>
        </div>
    </template>
    
    <script>
    export default {
        props: ['items'],
        data() {
            return {
    
            }
        },
        methods:{
            // 根据路径绑定到对应的二级菜单,防止页面刷新重新跳回第一个
            toIndex(){
                return this.$route.path.split('/')[2];
            },
        },
    };
    </script>
    
    <style scoped>
    /* 左侧菜单栏定位和位置大小设定 */
    .sidebar {
        display: block;
        position: absolute;
        left: 0;
        top: 70px;
        bottom: 0;
        overflow-y: scroll;
    }
    .sidebar::-webkit-scrollbar {
        width: 0;
    }
    .sidebar-el-menu {
        width: 250px;
    }
    .sidebar > ul {
        height: 100%;
    }
    
    /* 左侧二级菜单项的样式 */
    .el-menu-item{
        font-size: 14px !important;
        padding-left: 35px !important;
        color: black !important;
    }
    
    /* 左侧二级菜单选中时的样式 */
    .el-menu-item.is-active {
        color: white !important;
        background: #3989fa!important;
    }
    .el-menu-item, .el-submenu__title {
        height: 50px !important;
        line-height: 50px !important;
    }
    </style>

    4、然后在各个一级菜单下( 项目目录的 page 文件夹下的各个文件夹里的 index.vue )调用左侧二级菜单栏组件。

    每个 index.vue 会对应每个一级菜单,这个通过改变路径(@select="handleSelect")和对路由进行配置来实现跳转,通过组件之间的传值通信把二级菜单项传给左侧二级菜单栏的组件。

    再次用 router-view 通过路由来进行组件页面跳转(这样就形成两层嵌套,进行两次 router-view 路由跳转),index.vue 代码如下:

    <template>
    <div>
        
        <!-- 一级菜单下面所拥有的二级菜单 -->
        <el-aside>
             <SideMenu :items='items'></SideMenu>
        </el-aside>
    
        <!-- 以及二级菜单所对应的页面 -->
        <el-main>
            <router-view></router-view>
        </el-main>
    
    </div>
    </template>
    
    <script>
    import SideMenu from '@/components/sidemenu/SideMenu';
    export default {
        components:{
            SideMenu
        },
        data(){
            return {
                items: [
                {
                    index: 'test1-1',
                    title: '二级菜单1-1'
                },
                {
                    index: 'test1-2',
                    title: '二级菜单1-2'
                },
                {
                    index: 'test1-3',
                    title: '二级菜单1-3'
                },
                {
                    index: 'test1-4',
                    title: '二级菜单1-4'
                },
                {
                    index: 'test1-5',
                    title: '二级菜单1-5'
                }
            ],
            }
        }
    }
    </script>
    
    <style scoped>
    </style>

    5、一二级菜单联动效果所需的组件和页面基本弄好了,最后得将这些都拼接起来走通,要对 vue-router 进行配置( router 文件夹下 index.js 文件),代码如下:

    import Vue from 'vue';
    import Router from 'vue-router';
    
    Vue.use(Router);
    
    export default new Router({
        routes: [{
                path: '/',
                redirect: '/dashboard'
            },
            {
                path: '/',
                component: () => import('../components/common/Whole.vue'),
                meta: {
                    title: '整体页面布局'
                },
                children: [{
                        path: '/dashboard',
                        component: () => import('../page/Dashboard.vue'),
                        meta: {
                            title: '首页'
                        },
                        redirect:'/Home',     // 该配置是若点击选择父目录时,默认选中该父目录下的子路径页面
                            children: [{
                                path: '/Home',
                                component: () => import('../page/Dashboard.vue'),
                                meta: {
                                    title: '首页'
                                },
                            }               
                    ]
                    },
                    {
                        path: '/test1',
                        component: () => import('../page/test1/index.vue'),
                        meta: {
                            title: '一级菜单1'
                        },
                        redirect:'/test1/test1-1',     // 该配置是若点击选择一级菜单时,默认选中并跳转到该一级菜单下的第一个二级菜单
                            children:[
                                {
                                    path: 'test1-1',
                                    component: () => import('../page/test1/test1-1.vue'),
                                    meta: {
                                        title: '二级菜单1-1'
                                    },
                                },
                                {
                                    path: 'test1-2',
                                    component: () => import('../page/test1/test1-2.vue'),
                                    meta: {
                                        title: '二级菜单1-2'
                                    },
                                },
                                {
                                    path: 'test1-3',
                                    component: () => import('../page/test1/test1-3.vue'),
                                    meta: {
                                        title: '二级菜单1-3'
                                    },
                                },
                                {
                                    path: 'test1-4',
                                    component: () => import('../page/test1/test1-4.vue'),
                                    meta: {
                                        title: '二级菜单1-4'
                                    },
                                },
                                {
                                    path: 'test1-5',
                                    component: () => import('../page/test1/test1-5.vue'),
                                    meta: {
                                        title: '二级菜单1-5'
                                    },
                                }
                            ]
                    },
                    {
                        path: '/test2',
                        component: () => import('../page/test2/index.vue'),
                        meta: {
                            title: '一级菜单2'
                        },
                        redirect:'/test2/test2-1',
                            children:[
                                {
                                    path: 'test2-1',
                                    component: () => import('../page/test2/test2-1.vue'),
                                    meta: {
                                        title: '二级菜单2-1'
                                    },
                                },
                                {
                                    path: 'test2-2',
                                    component: () => import('../page/test2/test2-2.vue'),
                                    meta: {
                                        title: '二级菜单2-2'
                                    },
                                },
                                {
                                    path: 'test2-3',
                                    component: () => import('../page/test2/test2-3.vue'),
                                    meta: {
                                        title: '二级菜单2-3'
                                    },
                                },
                            ]
                    },
                    {
                        path: '/test3',
                        component: () => import('../page/test3/index.vue'),
                        meta: {
                            title: '一级菜单3'
                        },
                        redirect:'/test3/test3-1',
                        children:[
                            {
                                path: 'test3-1',
                                component: () => import('../page/test3/test3-1.vue'),
                                meta: {
                                    title: '二级菜单3-1'
                                }
                            },
                            {
                                path: 'test3-2',
                                component: () => import('../page/test3/test3-2.vue'),
                                meta: {
                                    title: '二级菜单3-2'
                                }
                            },
                        ]
                    },
                    {
                        // 权限页面
                        path: '/permission',
                        component: () => import('../page/Permission.vue'),
                        meta: {
                            title: '权限测试',
                            permission: true
                        }
                    },
                    {
                        path: '/404',
                        component: () => import('../page/404.vue'),
                        meta: {
                            title: '404'
                        }
                    },
                    {
                        path: '/403',
                        component: () => import('../page/403.vue'),
                        meta: {
                            title: '403'
                        }
                    },
                ]
            },
            {
                // 登录页面
                path: '/login',
                component: () => import('../page/Login.vue'),
                meta: {
                    title: '登录'
                }
            },
            {
                path: '*',
                redirect: '/404'
            }
        ]
    });

    6、顶部一级菜单栏,左侧二级菜单栏的功能效果完成了,接下来就可以去开发具体的主体内容区域的页面了。例如 test1-2.vue 的代码如下:

    <template>
    <div class="content-box">
      <div class="container">
        <p>主体页面 1 - 2 </p>
        <div class="test-div">
          <i class="el-icon-edit"></i>
          <i class="el-icon-share"></i>
          <i class="el-icon-delete"></i>
        </div>
      </div>
    </div>
    </template>
    
    <script>
    export default {
      data(){
        return{
    
        }
      }
    }
    </script>
    
    <style>
    .test-div i{
      font-size: 25px;
    }
    </style>

    其中主体内容区域的定位和位置大小设定的 css 如下( 这些样式是公共,可复用的,单独写一个样式文件来全局引入使用 ):

    /* 页面主体部分 */
    .content-box {
        position: absolute;
        left: 250px;      /* 控制左侧二级菜单栏的宽度 */
        right: 0;
        top: 70px;
        bottom: 0;
        padding: 10px 20px;
        -webkit-transition: left .3s ease-in-out;
        transition: left .3s ease-in-out;
        background: #f0f0f0;
    }
    .container {
        padding: 20px;    /* 控制主体部分与主体边框的距离 */
        background: #fff;
        border: 1px solid #ddd;
        border-radius: 5px;
    }
    /* 测试主体页面的 div 样式 */
    .test-div{
        margin: 15px;
    }

    整个后台管理系统模板的核心内容开发大致是这样的,更多具体细节可以下载完整的源码来看。

    项目实现了登录功能,一二级菜单联动选择展示不同的主体内容部分,封装了 axios 请求库,还配置了管理员和普通用户的权限区分。

    这是我本人在工作学习中遇到的问题,并对解决问题的方案进行了一次记录,跟小伙伴们分享出来哈 ~ 供参考学习,有什么建议也欢迎评论留言,转载请注明出处哈,感谢支持!


    后续扩展文章:

    Vue + ElementUI 后台管理系统实现主题风格切换:https://blog.csdn.net/weixin_41856395/article/details/111173730

    Vue + ElementUI 后台管理系统实现顶部一级菜单栏,左侧多级菜单栏(二级、三级等):https://blog.csdn.net/weixin_41856395/article/details/116062604

    展开全文
  • 菜单,下拉菜单,单选菜单,选择菜单,弹出菜单菜单绑定等功能的实现

    python之tkinter中菜单栏的快速学习
    本文主要讲述菜单栏的一些应用,附上代码,供大家学习。

    import tkinter#导入tkinter库
    top=tkinter.Tk()#创建一个主窗口
    top.geometry('400x800+0+0')#指定主窗口大小
    top.wm_title('Menu菜单功能的实现') #设置标题名称
    main_m=tkinter.Menu(top)#创建主菜单
    #-----------------------------------------------------------#
    item_File=tkinter.Menu(main_m,tearoff=0) #创建菜单,tearoff=0是关闭第0行虚线
    for i in ['New','Open','Save','Save As']:#利用for循环逐一给菜单增添下来菜单
        item_File.add_command(label=i)#label是设置下拉菜单的名称
    
    item_File.add_separator() #指定分隔线
    
    for i in ['Option1','Option2','Option3','Option14']:#利用for循环逐一给菜单增添下来菜单
        item_File.add_checkbutton(label=i)#创建选择按钮菜单,可多选
    
    item_File.add_separator() #指定分隔线
    
    for i in ['Option1','Option2','Option3','Option4']:#利用for循环逐一给菜单增添下来菜单
        item_File.add_radiobutton(label=i)#创建单选按钮菜单,只能单选
    
    main_m.add_cascade(label='File',menu=item_File)#级连
    #-----------------------------------------------------------#
    item_Edit=tkinter.Menu(main_m,tearoff=0)
    
    for i in ['Copy','Cut','Paste']:
        item_Edit.add_command(label=i)
    
    main_m.add_cascade(label='Edit',menu=item_Edit)#级连
    #------------------------------------------------------------#
    def f():
        global top,jump_main #定义全局变量
        tkinter.Label(top,text=top.winfo_pointerxy()).grid(row=0,column=0) #或者用pack()会将坐标直接显示在中间,并且一直累积下去
        #winfo_ponterxy()是显示坐标值
    def abc(xyz):
        jump_main.post(xyz.x,xyz.y)#post为弹出菜单
    #-----------------------------------------------------------#
    jump_main=tkinter.Menu(top,tearoff=0)
    
    for i in ['Refresh','Copy','Paste','Exit']:#利用for循环逐一给菜单增添下来菜单
        jump_main.add_command(label=i) #label是设置下拉菜单的名称
    
    jump_main.add_command(label='Display',command=f)
    top.bind('<Button-3>',abc)#bind绑定事件,点击鼠标右键执行相应函数
    
    top['menu']=main_m#指定顶层菜单
    top.mainloop()
    

    另外,
    关于菜单栏还有一些属性,如下:
    activebackground,鼠标位于组件上方时,显示组件背景颜色
    activeborderwidth,
    activeforeground,鼠标位于组件上方时,显示组件背景颜色
    background,背景颜色
    borderwidth,选择边缘的宽度,默认值为2像素点宽
    cursor,指出鼠标形状
    disabledforeground,
    font,指出文本的字体字号
    foreground,前景颜色
    postcommand,可将这个选项设置为一个函数,当用户点击菜单时调用函数
    relief,指出组件风格,默认为flat
    selectcolor,指定选择按钮或单选按钮的显示颜色
    tearoff,设置为0,关闭菜单项上第0行的虚线
    tearoffcommand,菜单独立被触发时的回调
    title,设置控件标题
    等。

    菜单设置的一些方法及命令:
    #添加一个子菜单 option为配置选项
    add_cascade(option…)
    #添加一个切换按钮 option为配置选项
    add_checkbutton(option…)
    #添加一个功能按钮 option为配置选项
    add_command(option…)
    #添加一个单选按钮 option为配置选项
    add_radiobutton(option…)
    #添加一个分割线
    add_separator()
    #删除index1 到 index2之间的选项
    delete(index1,index2)
    #在指定位置插入一个子菜单
    insert_cascade(index,option…)
    #在指定位置插入一个切换按钮
    insert_checkbutton(index,option…)
    #在指定位置插入一个功能按钮
    insert_command(index,option…)
    #在指定位置插入一个单选按钮
    insert_radiobutton(index,option…)
    #在指定位置插入一个分割线
    insert_separator(index)
    #在窗口指定位置弹出菜单
    post(x,y)
    #获取个选项的类型
    type(index)
    #获取某个选项距离菜单顶部的偏移量
    yposition(n)

    展开全文
  • MFC重绘标题栏、菜单栏并更改状态栏背景色。工具栏背景色未修改成功!
  • Qt菜单栏、工具栏、状态栏介绍及工具栏action的动态增删显示实现方式 版本说明 版本 作者 日期 备注 0.1 loon 2018.11.12 初稿 目录 文章目录Qt菜单栏、工具栏、状态栏介绍及工具...

    Qt菜单栏、工具栏、状态栏介绍及工具栏action的动态增删显示实现方式


    版本说明

    版本作者日期备注
    0.1loon2018.11.12初稿

    目录

    一、需求和目的

    基本上所有的编辑器都支持工具栏快捷功能的动态增删,即我们在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮,那么Qt如何实现这个功能呐,我们本次总结的目的就是记录我解决这个问题的思路和方法。

    二、菜单栏、工具栏、状态栏

    对于这三个概念先做一个简单的了解,我们直接上一个source insight的图,来说一下什么是菜单栏、工具栏和状态栏:

    在这里插入图片描述

    最上面的可以下拉的菜单栏,然后是快捷点击的工具栏,最下面的是显示某些状态信息的状态栏。菜单栏的功能一般来说就是最全的,工具栏的内容可以在菜单栏中进行设置以在有限的位置显示出我们需要的常用的一些功能的快捷点击按钮(此外,还有快捷键,这里就不展开了)。

    三、Qt菜单栏、工具栏和状态栏的基本操作说明

    打开Qt助手,分别搜索menuBar、toolBar、statusBar,找到对应的QMenuBar、QToolBar、QStatusBar的类说明进行了解。基础的应用了解一下其方法和属性(公有的、私有的、受保护的都了解一下)、槽、信号等,再了解一些如何使用的 详细描述以及一些注意事项就可以很快上手了。

    在这里插入图片描述

    1、QMenuBar:

    见名知意一下,使用的时候再具体去看一下,基本没什么问题,下面的是公有方法,还有一些其他的内容在助手上都很详细,根据需要去了解一下即可。

    函数说明
    QMenuBar(QWidget *parent = Q_NULLPTR)
    ~QMenuBar()
    QAction *actionAt(const QPoint &pt) const
    QRect actionGeometry(QAction *act) const
    QAction *activeAction() const
    QAction *addAction(const QString &text)
    QAction *addAction(const QString &text, const QObject *receiver, const char *member)
    QAction *addMenu(QMenu *menu)
    QMenu *addMenu(const QString &title)
    QMenu *addMenu(const QIcon &icon, const QString &title)
    QAction *addSeparator()
    void clear()
    QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
    QAction *defaultAction() const
    QAction *insertMenu(QAction *before, QMenu *menu)
    QAction *insertSeparator(QAction *before)
    bool isDefaultUp() const
    bool isNativeMenuBar() const
    void setActiveAction(QAction *act)
    void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
    void setDefaultAction(QAction *act)
    void setDefaultUp(bool )
    void setNativeMenuBar(bool nativeMenuBar)
    NSMenu *toNSMenu()

    详细描述:

    QMenuBar类提供了一个水平菜单栏。

    菜单栏由下拉菜单项列表组成。使用addMenu()添加菜单项。例如,假设menubar是一个指向QMenuBar的指针,fileMenu是一个指向QMenu的指针,那么下面的语句将菜单插入到菜单栏中:

    menuBar->addMenu(fileMenu);
    

    菜单项文本中的&号设置Alt+F作为此菜单的快捷方式。(你可以使用“&&”在菜单栏中得到一个真正的&符号。)

    没有必要设置菜单栏。它自动将自己的几何图形设置到父小部件的顶部,并在父小部件调整大小时适当地修改它。

    使用

    在大多数主窗口样式应用程序中,您将使用QMainWindow中提供的menuBar()函数,将qmenu添加到菜单栏中,并将QActions添加到弹出菜单中。

    示例(来自菜单示例):

    fileMenu = menuBar()->addMenu(tr(“文件”));
    fileMenu->addAction(newAct);
    

    可以使用removeAction()方法删除菜单项。

    可以使用QWidgetAction类的实例将小部件添加到菜单中。然后,可以按照通常的方式将这些操作插入到菜单中;有关详细信息,请参阅QMenu文档。

    平台依赖的外观和感觉

    不同的平台对菜单栏的外观和用户交互时的行为有不同的要求。例如,Windows系统经常被配置为只在按下Alt键时才显示菜单栏中显示键盘快捷键的下划线字符助记符。

    其它还有一些在MAC和Win CE上使用的一些说明,这里就不多说了。

    2、QToolBar

    详细描述:

    QToolBar类提供一个包含一组控件的可移动面板。

    使用addAction()或insertAction()通过添加操作添加工具栏按钮。可以使用addSeparator()或insertSeparator()分隔按钮组。如果工具栏按钮不合适,可以使用addWidget()或insertWidget()插入小部件。合适的小部件的例子有QSpinBox、QDoubleSpinBox和QComboBox。当按下工具栏按钮时,它会发出actiontrigger()信号。

    工具栏可以固定在特定区域(例如窗口顶部),也可以在工具栏区域之间移动;请参阅setMovable()、isMovable()、allowedAreas()和isAreaAllowed()。

    当工具栏的大小调整到太小而不能显示它所包含的所有项目时,扩展按钮将作为工具栏中的最后一个项目出现。按下扩展按钮将弹出一个菜单,其中包含当前不在工具栏中的项目。

    如果QToolBar不是QMainWindow的子窗口,它就失去了使用addWidget()在工具栏中添加小部件填充扩展弹出框的能力。请使用继承QWidgetAction并实现QWidgetAction::createWidget()创建的小部件操作。

    请参阅QToolButton、QMenu、QAction和应用程序示例。

    可以看到工具栏还可以插入QSpinBox、QDoubleSpinBox和QComboBox小部件呐,感兴趣的可以试试,此外,点击工具栏按钮时发出的是actiontrigger信号。

    3、QStatusBar

    QStatusBar类提供了一个适合显示状态信息的水平条。

    每个状态指示器分为以下三类:

    • Temporary(暂时的)-暂时占据状态栏的大部分。例如,用于解释工具提示文本或菜单项。
    • Normal(一般的) -占据状态栏的一部分,可能被临时消息隐藏。例如,用于在字处理器中显示页和行号。
    • Permanent(永久的)-永远不会隐藏。例如,一些应用程序将大写锁定指示器放在状态栏中,用于重要的模式指示。

    QStatusBar可以显示所有三种类型的指示器。

    通常,状态栏功能的请求与QMainWindow对象相关。QMainWindow提供了一个主应用程序窗口,其中包含一个菜单栏、工具栏、停靠小部件和一个围绕大型中央小部件的状态栏。可以使用QMainWindow::statusBar()函数检索状态栏,并使用QMainWindow::setStatusBar()函数替换状态栏。

    使用showMessage()显示临时消息:

    void MainWindow::createStatusBar()
    {
    	statusBar()->showMessage(tr(“准备好”));
    }
    

    要删除临时消息,请使用clearMessage()槽函数,或在调用showMessage()时设置时间限制。例如:

    void MainWindow::print ()
    {
    #ifndef QT_NO_PRINTDIALOG
    	QTextDocument *document = textEdit->document();
    	QPrinter printer;
    
    	QPrintDialog dlg(&printer, this);
    	if (dlg.exec() != QDialog::Accepted){
    		return;
    	}
    
    	document->print(&printer);
    	statusBar()->showMessage(tr(“Reday”),2000);
    # endif
    }
    

    使用currentMessage()函数来检索当前显示的临时消息。QStatusBar类还提供了messageChanged()信号,当临时状态消息发生更改时发出该信号。

    通过创建一个小部件(QLabel、QProgressBar甚至QToolButton),然后使用addWidget()或addPermanentWidget()函数将其添加到状态栏中,可以显示普通消息和永久消息。使用removeWidget()函数从状态栏删除此类消息。

    statusBar()->addWidget(new MyReadWriteIndication);
    

    默认情况下,QStatusBar在右下角提供一个QSizeGrip。您可以使用setSizeGripEnabled()函数禁用它。使用isSizeGripEnabled()函数确定大小手柄的当前状态。

    参见QMainWindow, QStatusTipEvent, GUI设计手册:状态栏和应用实例。

    由此可以看出状态栏一般都分成三份呐(暂时、一般、永久)。此外,还可以插入小部件别忘记用。

    四、工具栏功能在菜单栏进行动态配置的实现思路

    1、思路

    根据上面的描述,我们可以看到一般就是用addaction和insertaction添加action的,一般我们用Qt设计师设计完后action都已经有了,所以addaction不是很好用了,我这里是用insertaction,但是insert要指定放在哪个action前面,这就麻烦了,我们动态添加的时候不知道前一个action是什么,所以这里就用到了一个小技巧: 在最后设置占位action(占位的action名字设置为|即可),那么我们insertaction时就插入到对应的占位action前面就可以了,即设置空白的action进行占位。 移除就不用多说了,直接removeaction。

    使action可选的方式就是设置action为checked即可选的,然后就可以设置enabled来(true、false)显示√了。

    定义工具栏的显示与否这里就不说了,很简单,使用其自带的槽函数结合一个action按钮就可以了。

    2、结果展示

    这里主要演示工具栏的action动态增删,至于状态栏菜单栏的扩展这里就不演示了(图片大小不能超过5M哈)。

    在这里插入图片描述

    五、最后

    学习如何使用Qt创建菜单栏、工具栏和状态栏很简单,按部就班即可,但是如何灵活的运用这些知识来解决实际问题往往需要一些技巧,这些技巧往往就是我们要总结和回顾的经验。

    展开全文
  • 但是,透明的菜单栏有点像易读的噩梦,是我无法忍受的。因此,我开发了Boring Old Menu Bar,将“完美无缺”的macOS Catalina菜单栏引入了macOS 11 Big Sur。 卡塔琳娜(Catalina)菜单栏非常好,但是在明亮模式下...

    macOS 11 Big Sur做对了很多事情,经过一番适应之后,视觉风格真正在您身上发展。但是,透明的菜单栏有点像易读的噩梦,是我无法忍受的。因此,本站开发了Boring Old Menu Bar,将“完美无缺”的macOS Catalina菜单栏引入了macOS 11 Big Sur。

    卡塔琳娜(Catalina)菜单栏非常好,但是在明亮模式下白色看起来更好。为什么不添加更多选项呢?
    苹果是否应该将屏幕圆角化以完成iPad风格的外观?判断自己。

    对比前:

    对比后:

    未来软件园为您带来Boring Old Menu Bar。
    - 明亮和黑暗模式的单独设置
    - 支持动态墙纸
    - 支持多个桌面(空间)
    - 支持多种显示
    - 隐藏菜单栏图标以回收空间的可能性
    - 没有haxies,KEXT等。
    - 基于完全安全的编程习惯:可能发生的最糟糕的情况是,您必须强制退出并从“系统偏好设置”中手动设置桌面墙纸

    注意!此软件只适用于mac 11 big sur系统!

    展开全文
  • 百度搜了一下,基本都是上下收缩二级菜单这些的,但是需求是要整个菜单栏都隐藏收起,只能自己弄了,如果不是要这个功能的就别看了,先上效果图(顺便晒晒我家的荷兰猪~~~) 左侧菜单栏未收起 点击左上的左箭头...
  • PyQt5之菜单栏和工具栏

    千次阅读 2020-05-29 17:19:41
    PyQt5之菜单栏和工具栏 在MainWindow主窗口中,主要包含菜单栏、工具栏、任务栏等。这里我们来介绍菜单栏和工具栏的使用。 1、 首先新建一个主窗口,双击菜单栏上的"Type Here",输入文字,最后按回车键即可生成...
  • Qt添加菜单栏和工具栏

    万次阅读 热门讨论 2018-10-24 18:30:43
    Qt添加菜单栏和工具栏 版本说明 版本 作者 时间 备注 0.1 loon 2018.10.24 初步制作出登录对话框 目录 文章目录Qt添加菜单栏和工具栏版本说明目录一、需求与目的二、详细说明三、...
  • QT 自定义菜单栏

    万次阅读 2018-10-10 10:28:04
    dialog却没有,因此mainwindow可以直接在ui文件中进行添加,而dialog只能通过代码进行自定义菜单设置 本文主要介绍menubar和statusbar的自定义添加 mainwindow的UI界面 自定义menubar和statusbar 什么...
  • jQuery ligerUI Demos 导航页、菜单栏
  • SecureCRT界面的菜单栏不见了怎么办?

    千次阅读 多人点赞 2021-07-30 22:27:26
    SecureCRT界面的菜单栏不见了怎么办? 不慌,按以下步骤进行操作即可解决此问题。 在“红框”内,鼠标右键 选中“Customize…” 选中“Toobars” 选中“Menu Bar”在方框内打勾—>菜单栏就显示出来了 最后...
  • 从数据库中读出数据,动态绑定到menu菜单栏,不同权限读出的菜单栏不同
  • html导航菜单栏

    热门讨论 2012-06-08 10:33:42
    风格朴素漂亮的html模板 黑色的水平导航菜单 菜单项弹出显示
  • Qt纯代码实现菜单栏、工具栏、状态栏

    千次阅读 多人点赞 2019-04-23 22:02:23
    菜单栏 工具栏 状态栏 总体效果 在QWidget中实现菜单栏、工具栏、状态栏 其他 子窗口获取父窗口指针 QWidget阻塞模式 本篇演示的例子是在QMainWindow中进行的,在QWidget中可采取另外的方法,在文末会涉及。...
  • tkinter制作菜单栏

    千次阅读 2020-03-21 08:53:07
    原文地址 分类目录——tkinter ...定义一个菜单条,或横条(顶部的菜单横条),或竖条(点击‘文件’弹出的竖条),或额外的子条(点击某个选项后展开的条),如下图中的三个红色方框框住的,都可以被认为是一个M...
  • 修改为顶置菜单栏效果如下: 如何实现的? 一、先注释左侧边栏的部分 二、新建一个子组件topMenuList <template> <div> <div style="display: flex;height: 60px;align-items: center;...
  • wpf界面菜单栏设计

    千次阅读 2019-06-12 10:55:06
    wpf配置菜单栏  WPF 内建了两种菜单——Menu 和ContextMenu(上下文菜单)。  1. Menu  Menu 的项可以是任何东西,但是你应该使用MenuItem 以及Separator 对象。   <Menu x:Name="menu" Height="23.333...
  • Android之底部菜单栏的实现

    万次阅读 多人点赞 2019-01-14 15:50:00
    在我们的项目中,基本上都会用到底部菜单栏,通过点击不同的底部菜单导航到不同的Fragment,布局采用的是RadioButton+Fragment,先看与一下效果(如下图)   因为手机没有录屏,所有不能展示效果,但总算是实现...
  • vscode菜单栏显示

    千次阅读 2020-09-12 11:40:48
    如果你的状态栏一不小心被隐藏了 像这样: 后来发现是因为设置了 查看====>...想要改回来只需要在没有菜单栏的状态下按下alt 查看====>外观=======>切换菜单栏 在执行这个步骤就可以了 ...
  • html 水平、垂直 菜单栏

    千次阅读 2019-04-12 11:57:44
    水平菜单栏: <!DOCTYPE html> <html> <head> <style> ul { list-style-type:none; margin:0; padding:0; } li { float:left; border-right: 1px solid white; } a:link,a:visited { ...
  • 在PyQt5中的菜单栏和工具栏

    千次阅读 2017-12-24 02:59:32
    在这一部分,我们学习创建状态栏,菜单栏和工具栏。一个菜单是位于菜单栏的一组命令。一个工具栏有一些按钮,这些按钮在应用程序中拥有一些常用命令。状态栏显示状态信息,通常位于应用窗口下方。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 431,554
精华内容 172,621
关键字:

菜单栏