QMainWindow

QMainWindow 是一个为用户提供主窗口程序的类,包含以下几种类型部件,是许多应用程序的基础。

示例代码


  1. void MainWindow::test()
  2. {
  3. // ----------------------------------- 菜单栏(只能有一个)-----------------------------------
  4. QMenuBar *menuBar = this->menuBar();
  5. this->setMenuBar(menuBar); // 将菜单栏设置到窗口中 这里是 set 开头表示只能有一个
  6. // 增加菜单
  7. QMenu *fileMenu = menuBar->addMenu("文件");
  8. QMenu *editMenu = menuBar->addMenu("编辑");
  9. // 增加子菜单
  10. QAction *fileMenuAction = fileMenu->addAction("新建");
  11. QAction *openMenuAction = fileMenu->addAction("打开");
  12. fileMenu->addSeparator(); // 增加分隔线
  13. QAction *closeMenuAction = fileMenu->addAction("关闭");
  14. QAction *printMenuAction = fileMenu->addAction("打印");
  15. // 为每个子菜单设置信号槽
  16. connect(fileMenuAction, &QAction::triggered, []{
  17. qDebug() << "点击了菜单栏: 新建";
  18. });
  19. connect(openMenuAction, &QAction::triggered, []{
  20. qDebug() << "点击了菜单栏: 打开";
  21. });
  22. connect(closeMenuAction, &QAction::triggered, []{
  23. qDebug() << "点击了菜单栏: 关闭";
  24. });
  25. connect(printMenuAction, &QAction::triggered, []{
  26. qDebug() << "点击了菜单栏: 打印";
  27. });
  28. // ----------------------------------- 增加工具栏(可以有多个)-----------------------------------
  29. QToolBar *toolBar = new QToolBar("工具栏", this);
  30. this->addToolBar(Qt::RightToolBarArea, toolBar); // 将工具栏加入到窗口中, 并设置默认向左停靠, 这里是 add 开头表示可以有多个
  31. toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); // 只允许左右停靠
  32. toolBar->setFloatable(false); // 禁止浮动
  33. //toolBar->setMovable(false); // 禁止移动(总开关, 不允许停靠\不允许浮动\不允许拖拽)
  34. // 可以增加已有的菜单
  35. toolBar->addAction(fileMenuAction); // 选择菜单栏里面的 ‘新建’ 菜单 (不能再定义 QAction * 来接收返回值)
  36. toolBar->addAction(openMenuAction); // 选择菜单栏里面的 ‘编辑’ 菜单 (不能再定义 QAction * 来接收返回值)
  37. toolBar->addSeparator();
  38. // 也可以新增自定义的菜单
  39. QAction *selToolAction = toolBar->addAction("选择");
  40. QAction *fselToolAction = toolBar->addAction("反选");
  41. toolBar->addSeparator(); // 增加分隔线
  42. // 也可以增加控件
  43. QPushButton *btn = new QPushButton("按钮", this);
  44. toolBar->addWidget(btn);
  45. // 为每个子菜单设置信号槽
  46. connect(selToolAction, &QAction::triggered, []{
  47. qDebug() << "点击了工具栏: 选择";
  48. });
  49. connect(fselToolAction, &QAction::triggered, []{
  50. qDebug() << "点击了工具栏: 反选";
  51. });
  52. connect(btn, &QPushButton::clicked, []{
  53. qDebug() << "点击了工具栏: 按钮";
  54. });
  55. // ----------------------------------- 状态栏(只能有一个) -----------------------------------
  56. QStatusBar *stBar = statusBar();
  57. this->setStatusBar(stBar); // 将状态栏设置到窗口中 这里是 set 开头表示只能有一个
  58. QLabel *labelTs = new QLabel("提示消息", this);
  59. QLabel *labelSt = new QLabel("状态信息", this);
  60. stBar->addWidget(labelTs); // 增加标签
  61. stBar->addPermanentWidget(labelSt); // 在右边增加标签
  62. // ----------------------------------- 中心部件(只能有一个)-----------------------------------
  63. QTextEdit *textEdit = new QTextEdit(this);
  64. this->setCentralWidget(textEdit); // 将中心部件设置到窗口中 这里是 set 开头表示只能有一个
  65. // ----------------------------------- 浮动窗口(可以有多个)-----------------------------------
  66. QDockWidget *dockWidget = new QDockWidget("浮动窗口", this);
  67. this->addDockWidget(Qt::BottomDockWidgetArea, dockWidget); // 将浮动窗口加入到窗口中, 并设置默认向底停靠, 这里是 add 开头表示可以有多个
  68. dockWidget->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea); // 设置只能向顶部或底部停靠
  69. }

实现效果

触发效果

  1. 点击了菜单栏: 新建
  2. 点击了菜单栏: 打开
  3. 点击了菜单栏: 关闭
  4. 点击了菜单栏: 打印
  5. 点击了菜单栏: 新建
  6. 点击了菜单栏: 打开
  7. 点击了工具栏: 选择
  8. 点击了工具栏: 反选
  9. 点击了工具栏: 按钮

不得不吐槽

想把 QT 打包成单文件可执行程序,没想到居然会有那么大,想想也释然。主要是 QT 程序依赖的库太多了,而微软的 MFC 因为很多依赖库系统自带,所以不需要连依赖库都打包。

【学习笔记】QT从入门到实战完整版(菜单栏、工具栏、浮动窗口、状态栏、中心部件)(3)的更多相关文章

  1. 2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载

    笔记作者:来自于阿里P8级大神: Mark 笔记特点:条理清晰,理论+实战+源码,含图像化表示更加易懂. 内容概要:Android 相关,性能优化,Java 相关,Kotlin 相关,网络相关,插件化 ...

  2. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  3. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  4. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  5. 电子书下载:Delphi XE 5 移动开发入门手册(完整版)

    更多电子书请到: http://maxwoods.400gb.com 下载:Delphi XE5移动开发入门手册(完整版)

  6. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  7. Android学习笔记(二十一)——实战:程序数据共享

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 我们继续在Database项目的基础上继续开发,通过内容提供器来给它加入外部访问接口.首先将 MyDataba ...

  8. Android学习笔记(十五)——实战:强制下线

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话 ...

  9. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  10. SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装

          刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...

随机推荐

  1. mlflow详细安装部署

    1.安装docker # 安装工具 sudo yum install -y yum-utils # 添加yum仓库配置 sudo yum-config-manager --add-repo https ...

  2. Python基础之函数:1、函数的介绍及名称空间

    目录 一.函数 1.什么是函数 2.函数的语法结构 3.函数的定义与调用 4.函数的分类 5.函数的返回值 6.函数的参数 二.函数参数 1.位置参数 2.默认参数 3.可变长参数 1.一个*号 2. ...

  3. 嵌入式-c语言基础:冒泡排序实现从大到小排列

    #include<stdio.h> int main() { /*冒泡排序:从大到小*/ /*i=0 第1轮(i+1):需要比较9次(sizeArr-i-1)*/ /*i=1 第2轮(i+ ...

  4. QQ登录

    public function login(){ $urlencode = urlencode("http://www.zhangxuhui.com/index/Index/callback ...

  5. Java-ArrayList应用

    存储随机数字 ArrayListRandom.java package cn.day04; import java.util.ArrayList; import java.util.Random; p ...

  6. ATM分析

    # 查看余额功能 1.第一层直接调用查看余额的接口(传当前登录用户名) 2.第二层直接调用第三层数据查询的接口 3.第二层从用户字典中提取出用户余额返回给第一层展示 # 账户提现功能 1.第一层获取用 ...

  7. TreeUtils工具类一行代码实现列表转树【第三版优化】 三级菜单 三级分类 附视频

    一.序言 在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单.多级目录.多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率. 本文将基于 ...

  8. Day21:方法重写以及注意细节

    目录 方法重写 什么是方法重写? 方法重写有什么用? 方法重写的注意细节 方法重写 什么是方法重写? 方法重写指的是当子类和父类出现了一摸一样的方法声明 方法重写有什么用? 当父类中有一个方法时,子类 ...

  9. vulnhub靶场之Chronos:1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Chronos,下载地址:https://download.vulnhub.com/chronos/Chronos.ova,下载后直接vbox打 ...

  10. Jmeter——结合Allure展示测试报告

    在平时用jmeter做测试时,生成报告的模板,不是特别好.大家应该也知道allure报告,页面美观. 先来看效果图,报告首页,如下所示: 报告详情信息,如下所示: 运行run.py文件,运行成功,如下 ...