【学习笔记】QT从入门到实战完整版(菜单栏、工具栏、浮动窗口、状态栏、中心部件)(3)
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)的更多相关文章
- 2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载
笔记作者:来自于阿里P8级大神: Mark 笔记特点:条理清晰,理论+实战+源码,含图像化表示更加易懂. 内容概要:Android 相关,性能优化,Java 相关,Kotlin 相关,网络相关,插件化 ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- tensorflow学习笔记二:入门基础 好教程 可用
http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础 TensorFlow用张量这种数据结构来表示所有的数据.用一 ...
- 电子书下载:Delphi XE 5 移动开发入门手册(完整版)
更多电子书请到: http://maxwoods.400gb.com 下载:Delphi XE5移动开发入门手册(完整版)
- spark学习笔记总结-spark入门资料精化
Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...
- Android学习笔记(二十一)——实战:程序数据共享
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 我们继续在Database项目的基础上继续开发,通过内容提供器来给它加入外部访问接口.首先将 MyDataba ...
- Android学习笔记(十五)——实战:强制下线
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话 ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装
刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...
随机推荐
- VBA_BASIC
字符串相关 判断单元格是否包含特定字符串,以"P"为例. if cells(1,1) Like "*P*" Then cells(1,2) = "ha ...
- 如何开发Vite3插件构建Electron开发环境
新用户购买<Electron + Vue 3 桌面应用开发>,加小册专属微信群,参与群抽奖,送<深入浅出Electron>.<Electron实战>作者签名版. 1 ...
- MQTT GUI 客户端 可视化管理工具推荐
一款好用的 MQTT 客户端工具可以极大地提高开发者使用MQTT的效率.MQTT 客户端工具常用于建立与 MQTT 服务器的连接,进行主题订阅.消息收发等操作. 今天,在此推荐一款优秀的MQTT GU ...
- Go语言核心36讲48
你真的很棒,已经跟着我一起从最开始初识Go语言,一步一步地走到了这里. 在这之前的几十篇文章中,我向你一点一点地介绍了很多Go语言的核心知识,以及一些最最基础的标准库代码包.我想,你已经完全有能力独立 ...
- Linux 中的内部命令和外部命令
Linux 中的内部命令和外部命令 作者:Grey 原文地址: 博客园:Linux 中的内部命令和外部命令 CSDN:Linux 中的内部命令和外部命令 什么是 bash shell ? bash s ...
- 《Hierarchical Text-Conditional Image Generation with CLIP Latents》阅读笔记
概括 模型总述 本篇论文主要介绍DALL·E 2模型,它是OpenAI在2022年4月推出的一款模型,OpenAI在2021年1月推出了DALL·E模型,2021年年底推出了GLIDE模型. DALL ...
- label studio 结合 MMDetection 实现数据集自动标记、模型迭代训练的闭环
前言 一个 AI 方向的朋友因为标数据集发了篇 SCI 论文,看着他标了两个多月的数据集这么辛苦,就想着人工智能都能站在围棋巅峰了,难道不能动动小手为自己标数据吗?查了一下还真有一些能够满足此需求的框 ...
- SSH(一)架包的引入
一年多未使用了,有些东西真的会忘. 一.ssh的图形化记忆运作流程 二.Struts2.hibernate.spring需要引用的jar包 Struts2: 基本开发:struts-2.3.32\ap ...
- web项目的开发--第一天
如何分析需求.如何设计.编码实现.测试. 用ssm架构实现CRM项目代码编写. CRM项目: 关键是养成好的编程思想和编程习惯. 技术架构 视图层(view): 展示数据,跟用户交互. html,cs ...
- java (String)强制转换与toString()方法
1. Object.toString()介绍 Object中是自带有toString()方法的,也就是说java中的所有类的对象都是可以转换为字符串的. 首先,先看看Object.toString() ...
