【学习笔记】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教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...
随机推荐
- mlflow详细安装部署
1.安装docker # 安装工具 sudo yum install -y yum-utils # 添加yum仓库配置 sudo yum-config-manager --add-repo https ...
- Python基础之函数:1、函数的介绍及名称空间
目录 一.函数 1.什么是函数 2.函数的语法结构 3.函数的定义与调用 4.函数的分类 5.函数的返回值 6.函数的参数 二.函数参数 1.位置参数 2.默认参数 3.可变长参数 1.一个*号 2. ...
- 嵌入式-c语言基础:冒泡排序实现从大到小排列
#include<stdio.h> int main() { /*冒泡排序:从大到小*/ /*i=0 第1轮(i+1):需要比较9次(sizeArr-i-1)*/ /*i=1 第2轮(i+ ...
- QQ登录
public function login(){ $urlencode = urlencode("http://www.zhangxuhui.com/index/Index/callback ...
- Java-ArrayList应用
存储随机数字 ArrayListRandom.java package cn.day04; import java.util.ArrayList; import java.util.Random; p ...
- ATM分析
# 查看余额功能 1.第一层直接调用查看余额的接口(传当前登录用户名) 2.第二层直接调用第三层数据查询的接口 3.第二层从用户字典中提取出用户余额返回给第一层展示 # 账户提现功能 1.第一层获取用 ...
- TreeUtils工具类一行代码实现列表转树【第三版优化】 三级菜单 三级分类 附视频
一.序言 在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单.多级目录.多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率. 本文将基于 ...
- Day21:方法重写以及注意细节
目录 方法重写 什么是方法重写? 方法重写有什么用? 方法重写的注意细节 方法重写 什么是方法重写? 方法重写指的是当子类和父类出现了一摸一样的方法声明 方法重写有什么用? 当父类中有一个方法时,子类 ...
- vulnhub靶场之Chronos:1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Chronos,下载地址:https://download.vulnhub.com/chronos/Chronos.ova,下载后直接vbox打 ...
- Jmeter——结合Allure展示测试报告
在平时用jmeter做测试时,生成报告的模板,不是特别好.大家应该也知道allure报告,页面美观. 先来看效果图,报告首页,如下所示: 报告详情信息,如下所示: 运行run.py文件,运行成功,如下 ...