QMainWindow

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

示例代码


void MainWindow::test()
{
// ----------------------------------- 菜单栏(只能有一个)-----------------------------------
QMenuBar *menuBar = this->menuBar();
this->setMenuBar(menuBar); // 将菜单栏设置到窗口中 这里是 set 开头表示只能有一个 // 增加菜单
QMenu *fileMenu = menuBar->addMenu("文件");
QMenu *editMenu = menuBar->addMenu("编辑"); // 增加子菜单
QAction *fileMenuAction = fileMenu->addAction("新建");
QAction *openMenuAction = fileMenu->addAction("打开");
fileMenu->addSeparator(); // 增加分隔线
QAction *closeMenuAction = fileMenu->addAction("关闭");
QAction *printMenuAction = fileMenu->addAction("打印"); // 为每个子菜单设置信号槽
connect(fileMenuAction, &QAction::triggered, []{
qDebug() << "点击了菜单栏: 新建";
}); connect(openMenuAction, &QAction::triggered, []{
qDebug() << "点击了菜单栏: 打开";
}); connect(closeMenuAction, &QAction::triggered, []{
qDebug() << "点击了菜单栏: 关闭";
}); connect(printMenuAction, &QAction::triggered, []{
qDebug() << "点击了菜单栏: 打印";
}); // ----------------------------------- 增加工具栏(可以有多个)-----------------------------------
QToolBar *toolBar = new QToolBar("工具栏", this);
this->addToolBar(Qt::RightToolBarArea, toolBar); // 将工具栏加入到窗口中, 并设置默认向左停靠, 这里是 add 开头表示可以有多个
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); // 只允许左右停靠
toolBar->setFloatable(false); // 禁止浮动
//toolBar->setMovable(false); // 禁止移动(总开关, 不允许停靠\不允许浮动\不允许拖拽) // 可以增加已有的菜单
toolBar->addAction(fileMenuAction); // 选择菜单栏里面的 ‘新建’ 菜单 (不能再定义 QAction * 来接收返回值)
toolBar->addAction(openMenuAction); // 选择菜单栏里面的 ‘编辑’ 菜单 (不能再定义 QAction * 来接收返回值)
toolBar->addSeparator(); // 也可以新增自定义的菜单
QAction *selToolAction = toolBar->addAction("选择");
QAction *fselToolAction = toolBar->addAction("反选");
toolBar->addSeparator(); // 增加分隔线 // 也可以增加控件
QPushButton *btn = new QPushButton("按钮", this);
toolBar->addWidget(btn); // 为每个子菜单设置信号槽
connect(selToolAction, &QAction::triggered, []{
qDebug() << "点击了工具栏: 选择";
}); connect(fselToolAction, &QAction::triggered, []{
qDebug() << "点击了工具栏: 反选";
}); connect(btn, &QPushButton::clicked, []{
qDebug() << "点击了工具栏: 按钮";
}); // ----------------------------------- 状态栏(只能有一个) -----------------------------------
QStatusBar *stBar = statusBar();
this->setStatusBar(stBar); // 将状态栏设置到窗口中 这里是 set 开头表示只能有一个 QLabel *labelTs = new QLabel("提示消息", this);
QLabel *labelSt = new QLabel("状态信息", this);
stBar->addWidget(labelTs); // 增加标签
stBar->addPermanentWidget(labelSt); // 在右边增加标签 // ----------------------------------- 中心部件(只能有一个)-----------------------------------
QTextEdit *textEdit = new QTextEdit(this);
this->setCentralWidget(textEdit); // 将中心部件设置到窗口中 这里是 set 开头表示只能有一个 // ----------------------------------- 浮动窗口(可以有多个)-----------------------------------
QDockWidget *dockWidget = new QDockWidget("浮动窗口", this);
this->addDockWidget(Qt::BottomDockWidgetArea, dockWidget); // 将浮动窗口加入到窗口中, 并设置默认向底停靠, 这里是 add 开头表示可以有多个
dockWidget->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea); // 设置只能向顶部或底部停靠 }

实现效果

触发效果

点击了菜单栏: 新建
点击了菜单栏: 打开
点击了菜单栏: 关闭
点击了菜单栏: 打印
点击了菜单栏: 新建
点击了菜单栏: 打开
点击了工具栏: 选择
点击了工具栏: 反选
点击了工具栏: 按钮

不得不吐槽

想把 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. JavaWeb4

    1. Filter 1.1 概述 Filter:过滤器 Servlet.Filter和Listener称为Web的三大组件 生活中的过滤器:净水器.空气净化器.土匪 web中的过滤器:当访问服务器的资 ...

  2. 基于Spring的发布订阅模式 EventListener

    基于Spring的发布订阅模式 在我们使用spring开发应用时,经常会碰到要去解耦合一些依赖调用,比如我们在做代码的发布流程中,需要去通知相关的测试,开发人员关注发布中的错误信息.而且通知这个操作又 ...

  3. 10 | Kubernetes一键部署利器:kubeadm

    你好,我是张磊.今天我和你分享的主题是:Kubernetes一键部署利器之kubeadm. 通过前面几篇文章的内容,我其实阐述了这样一个思想:要真正发挥容器技术的实力,你就不能仅仅局限于对Linux容 ...

  4. kubeEdge的MetaManager模块简介

    MetaManager 是edged和edgehub之间的消息处理器,它还负责将元数据存储到轻量级数据库SQLite或从中检索元数据(metadata). 根据以下不同的operation接收不同类型 ...

  5. Centos7.6分区、格式化、自动挂载磁盘

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 目录 1. 添加硬盘 2. 执行fdisk -l ...

  6. C语言实验手册

    在三位整数(100~999)中寻找符合条件的整数,并以此从小到大存到数组当中,它既是完全平方数,又是两位数字相同,例如144,676等. #include<stdio.h> #includ ...

  7. UBOOT编译--- UBOOT全部目标的编译过程详解(九)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 概述 本文接续上篇文章,采用自下而上的方法,先从最原始的依赖开始,一步一步,执行命令生成目标.这里先把上 ...

  8. c++题目:数迷

    c++题目:数迷 题目 [题目描述] 给出含有N×N个格子的正方形表格,要求每个格子都填上一个个位数(范围1-N),使得每行.每列以及同一斜线上的数字都不同.部分格子已经填好数字.求满足题意的方案数. ...

  9. js day04 实参与形参个数不一致

    // function fn(x, y) {         //     // x = 1         //     // y = undefined         //     // 1 + ...

  10. 【Shell案例】【wc、awk、cat、管道】1、统计文件的行数

    描述写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数示例:假设 nowcoder.txt 内容如下: #include <iostream> using names ...