4-主窗口

4-主窗口

  • 1、简介
  • 2 菜单栏、工具栏、状态栏
    • 2.1 菜单栏
    • 2.2 QAction
    • 2.3 工具栏
    • 2.4 状态栏
  • 3 混合方式UI设计

1、简介

  • QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏、多个工具栏、多个停靠控件、一个状态栏以及一个中心控件,是许多应用程序(比如文本编辑器、图片编辑器等)的基础。
  • 主窗口具有自己的布局管理器,因此不允许在主窗口上设置或创建布局管理器。但是在中心控件上可以设置。
    在这里插入图片描述

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

2.1 菜单栏

  • 菜单是一些列命令的列表
  • 为了实现菜单、工具栏按钮、键盘快捷方式等命令的一致性,Qt使用动作(QAction)来表示这些命令
  • Qt的菜单就是由一系列的QAction动作对象构成的列表
  • 菜单栏是包含菜单的面板,位于主窗口标题栏的下面
  • 一个主窗口只能有一个菜单栏

2.2 QAction

  • QAction类提供了抽象的用户界面action,这些action可以被放置在窗口控件中
  • QAction可以被添加到菜单和工具栏中,并且可以自动保持在菜单和工具栏中的同步。
  • QAction是可以作为独立的对象被创建,也可以在构建菜单时创建。
  • QAction可以包含一个图标、菜单文本、快捷键、状态文本等。
  • 只有将QAction添加到窗口控件上,才可以使用这些QAction。

2.3 工具栏

  • 工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成
  • 工具栏位于菜单栏的下面、状态栏的上面,可以停靠在主窗口的上下左右四个方向
  • 一个主窗口可以包含多个工具栏

2.4 状态栏

  • 提供一个用于展示状态信息的水平栏

3 混合方式UI设计

  • 可视化UI设计无需人工编写代码区处理大量繁琐的界面组件的创建和布局管理工作,可以直观地进行界面设计,大大提高工作效率。但某些组件无法可视化地添加到界面上。
  • 采用纯代码方式进行UI设计虽然无所不能,但是设计效率太低,过程非常繁琐。
  • 混合方式创建UI,即部分界面设计用UI设计器可视化实现,部分无法在UI设计器里实现的界面设计用代码实现。
    案列:实现下面的窗口及其功能
    在这里插入图片描述

1: 新建工程名为Editor,基类是QMainWindow,UI组件选择Text Edit,在窗口上选择控件-》视图-》action editor,在弹出的窗口中,新建下面的选项
在这里插入图片描述

2:设计菜单栏
在窗口上方输入文件,然后将action控件拖入其中
在这里插入图片描述

将控件拖入,当上方出现红色线条时,就说明成功了
在这里插入图片描述

然后依次完成以下页面的设计
在这里插入图片描述

3:设计工具栏
在窗口空白处单击,选择添加工具栏,依次将action控件拖入其中,效果如下
在这里插入图片描述

4:设计相关的槽函数,其中粘贴、剪切、复制、退出和清空不需要我们自定义槽函数,可以在页面上选择,其他均需要生成对应的槽函数。页面可选择如下:
在这里插入图片描述

自己选择的如下:
在这里插入图片描述

其中粗体、斜体、下划线、工具栏、状态栏是需要选择triggered(bool checked)这个槽函数的
在Text Edit控件中需要选择两个槽函数
在这里插入图片描述

5:根据原图,我们还需要字体和字号的控件,这俩需要我们自己书写定义

private:
// 自定义的槽函数void on_m_combFontName_currentIndexChanged(const QString &fontName);void on_m_spinFontSize_valueChanged(int fontSize);
// 变量QFontComboBox * m_combFontName;// 字体组合框对象指针QSpinBox* m_spinFontSize;// 存储字号QLabel* m_labCurFile;//当前文件

6:书写逻辑,源文件如下

EditorWindow::EditorWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::EditorWindow)
{ui->setupUi(this);// 设置中心组件setCentralWidget(ui->m_edit);// 设计工具栏ui->toolBar->addSeparator();// 添加分隔符 在当前工具栏的末尾添加ui->toolBar->addWidget(new QLabel(" 字体大小:"));// 字号大小m_spinFontSize = new QSpinBox; // 字号选择框m_spinFontSize->setMinimumWidth(60);//最小的宽度m_spinFontSize->setRange(8,72);// 字号大小的范围ui->toolBar->addWidget(m_spinFontSize);ui->toolBar->addWidget(new QLabel(" 字体名称:")); // 字体名称m_combFontName = new QFontComboBox;// 字体选择框m_combFontName->setMinimumWidth(80);//最小的宽度ui->toolBar->addWidget(m_combFontName);m_labCurFile = new QLabel("当前文件: "); // 添加尾部状态栏m_labCurFile->setMinimumWidth(400);ui->statusbar->addWidget(m_labCurFile);//建立信号和槽的连接// 字体选择connect(m_combFontName,SIGNAL(currentIndexChanged(QString)),this,SLOT(on_m_combFontName_currentIndexChanged(QString)));// 字号选择connect(m_spinFontSize,SIGNAL(valueChanged(int)),this,SLOT(on_m_spinFontSize_valueChanged(int)));
}
// 新建的槽函数
void EditorWindow::on_m_actNew_triggered(){QMessageBox::information(this,windowTitle(),"新建 文件 等待 处理");
}
// 打开的槽函数
void EditorWindow::on_m_actOpen_triggered()
{QMessageBox::information(this,windowTitle(),"打开 文件 等待 处理");}// 粗体的槽函数void EditorWindow::on_m_actBold_triggered(bool checked){QTextCharFormat fmt;fmt.setFontWeight(checked ? QFont::Bold : QFont::Normal);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 斜体的槽函数
void EditorWindow::on_m_actItalic_triggered(bool checked)
{QTextCharFormat fmt;fmt.setFontItalic(checked);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 下划线的槽函数
void EditorWindow::on_m_actUnderline_triggered(bool checked)
{QTextCharFormat fmt;fmt.setFontUnderline(checked);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 状态栏的槽函数
void EditorWindow::on_m_actStatusbar_triggered(bool checked)
{ui->statusbar->setHidden(!checked);
}
// 工具栏的槽函数
void EditorWindow::on_m_actToolbar_triggered(bool checked)
{ui->toolBar->setHidden(!checked);
}
// 关于的槽函数
void EditorWindow::on_m_actAbout_triggered()
{QMessageBox::information(this,windowTitle(),"关于 文件 等待 处理");
}
// 文本框 可复制槽函数
//何时m_edit中的信息可以被拷贝 - 复制/剪切
//如果不能复制和剪切 - 将两个QAction禁用
//文本框 文字改变槽函数
void EditorWindow::on_m_edit_copyAvailable(bool b)
{// 复制使能ui->m_actCopy->setEnabled(b);// 剪切使能ui->m_actCut->setEnabled(b);
}
// 文本发生改变的 槽函数  文本发生改变时判断是否可以清空
void EditorWindow::on_m_edit_textChanged()
{ui->m_actClear->setEnabled(ui->m_edit->toPlainText().size());
}
// 文本框 文本选择改变槽函数
void EditorWindow::on_m_edit_selectionChanged()
{// 当有文本选中时,查看对应文本已经设置的格式QFont font = ui->m_edit->currentFont();ui->m_actBold->setChecked(font.bold());//粗体ui->m_actItalic->setChecked(font.italic());//斜体ui->m_actUnderline->setChecked(font.underline());//下划线m_combFontName->setCurrentFont(font);// 字体m_spinFontSize->setValue(font.pointSize());
}
// 字体变化槽函数
void EditorWindow::on_m_combFontName_currentIndexChanged(const QString &fontName){QTextCharFormat fmt;fmt = ui->m_edit->currentCharFormat();fmt.setFontFamily(fontName);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 字号变化槽函数
void EditorWindow::on_m_spinFontSize_valueChanged(int fontSize){QTextCharFormat fmt;fmt = ui->m_edit->currentCharFormat();fmt.setFontPointSize(fontSize);ui->m_edit->mergeCurrentCharFormat(fmt);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 下的Qt工程无法打开 “xxx.ui“ 文件和LNK1104 无法打开文件“Qt5Cored.lib”错误

一、问题: VS下Qt环境准备好后,创建了Qt工程然后点击 Form Files 下的 “xxx.ui” 文件,在弹出 Qt 设计师 界面后闪退并显示如下错误: 二、解决 1、工具栏处依次点击:扩展 一> Qt VS Tools 一> options 弹出选…

网络工程师---第四十二天

1、基于子网的vlan划分配置步骤是什么? 2、基于端口的vlan划分配置步骤是什么? 3、基于MAC地址的vlan划分配置步骤是什么? 4、请简述无线局域网的组网方式有哪几种,区别是什么? 5、请简述堆叠、级联和集群作用和区别是…

在kaggle中的notebook 如何自定义 cuda 版本以及如何使用自定义的conda或python版本运行项目(一)

问题 第一部分 当前kaggle中带有gpu的notebook 默认的cuda 是12.1版本,如果我要跑一个项目是11.3的,如何将默认的cuda 改为自己需要的cuda 11.3 方法 step1 从官网下载需要的版本cuda run 文件(如cuda 11.3) 在nvidia cuda 下…

基于Netty实现安全认证的WebSocket(wss)服务端

1.Netty服务端 服务端代码参考【基于Netty实现WebSocket服务端-CSDN博客】中的两种方式都可以;这里用的是第一种简单方式。 新增如下逻辑:添加SSLHandler SSLContext sslContext SslUtil.createSSLContext("JKS","D:\\workSpace\\day…

Web(数字媒体)期末作业

一.前言 1.本资源为类似于打飞机的网页游戏 2.链接如下:【免费】前端web或者数字媒体的期末作业(类似于打飞机的2D网页小游戏)资源-CSDN文库 二.介绍文档

SAP HCM 标准程序如何定位内表赋值 ABAP DEBUG SCRIPT

Complacency is the enemy of study 学习的敌人是自己的满足。 标准内表定位代码位置!!! 不知道大家有没有尝试体会过debug标准程序,debug过程中发现SAP标准的内表不知道什么时候赋值,或者类的静态属性什么时候改变的,本文通过ABAP DEBUG SCRIPT的方式快速定位内表赋值或者类…

VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载

一、Ubuntu镜像地址 转载备份一下; 官方下载地址(不推荐) https://www.ubuntu.com/downloadhttps://www.ubuntu.com/download 中科大源 Index of /ubuntu-releases/16.04/http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开…

基于51单片机的电压表-数码管显示

一.硬件方案 本设计基于STC89C52单片机的一种电压测量电路,该电路采用ADC0832A/D转换芯片,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单, 可以测量0~9V的电压值,并在四位LED数码管上显示电压值。 二.设计功能 (1&…

工业网关设备:HiWoo Box网关

在数字化、智能化的工业浪潮中,工业网关以其卓越的性能和广泛的应用场景,成为了工业互联的核心驱动力。作为一款高效、稳定、智能的工业网关设备,HiWoo Box网关不仅实现了工业现场设备与网络的高效连接,更为企业提供了智能化的数据…

【linux】linux中免交互命令expect原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

智能客服新突破:大型模型训练助力提升客户服务体验

项目场景:训练大模型智能客服 智能客服新方法在金融服务领域的科技前沿应用 ** 一、 引言 随着科技的飞速发展,智能客服作为金融服务领域的一大创新点,正在逐渐改变传统的客户服务模式。特别是在自然语言处理(NLP)等…

【C++】多态:编程中的“一人千面”艺术

目录 一、多态的概念二、多态的定义及实现1.多态的构成条件2.虚函数的重写2.1 什么是虚函数?2.2 虚函数的重写是什么?2.3 虚函数重写的两个例外2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类3.1 概念3.2 接口继承和实现…

重学java 47.集合 ② 迭代器

金榜题名&#xff0c;前程似锦 —— 24.5.27 一、迭代器的介绍和使用 1.概述 Iterator接口 2.主要作用 遍历集合 3.获取 Collection中的方法&#xff1a; Iterator<E> iterator() 4.方法 boolean hasNext() —> 判断集合中有没有下一个元素 E.next() —> 获取下一个…

《QT实用小工具·六十六》基于QT开发的界面收缩栏

1、概述 源码放在文章末尾 该项目实现了一个界面收缩栏的效果&#xff0c;该收缩栏包含如下功能&#xff1a; 1、可以在收缩栏中添加若干个界面 2、鼠标点击收缩栏可以展开或收起界面 3、鼠标拖动收缩栏可以和其他界面互换位置 项目demo演示如下所示&#xff1a; 使用方式&…

jenkins 用户权限(Manage-Roles)

本次需求将DEV环境和SIT环境分开,SIT用户登录上来只能看他的SIT项目和视图 安装roles插件 进入 manage role 项目授权 用户 正则匹配你需要的项目 dev .*-dev*或者.*-dev$ sit .*-sit最后细分assign role 测试使用sit账号登录 ,视图和项目都是SIT账号的

移动云:开发者手中的未来钥匙

《移动云&#xff1a;开发者手中的未来钥匙》 引言一、无缝集成&#xff0c;加速开发进程二、数据智能&#xff0c;洞悉用户心声三、安全合规&#xff0c;护航创新之旅四、成本优化&#xff0c;助力轻装前行总结 引言 在科技日新月异的今天&#xff0c;移动云已成为推动行业变革…

kube-apiserver内存占用过多 go tool pprof 入门

目录 环境问题排查1、kube-apiserver %CPU 146 正常&#xff0c;%MEM 高达70&#xff0c;&#xff0c;load average 400&#xff0c;出现kswapd0进程。2、k describe node 看到 SystemOOM3、是否大量连接导致&#xff1f;4、通过prom查看指标5、访问K8s API6、pprof 火焰图 解决…

云服务器购买之后到部署项目的流程

1.通过账号密码登录百度智能云控制台; 2.进入对应的服务器‘云服务器BBC’ 找到’实例‘即找到对应的服务器列表; 此时通过本地电脑 1.cmd命令提示符 PING 服务器公网地址不通&#xff1b; 2.通过本地电脑进行远程桌面连接不通 原因&#xff1a;没有关联安全组&#xff0c;或者…

Linux的nload/nettraf命令实时网卡流量监测

对于linux的网卡上下行流量监测方法有很多 例如nload 现成的nload命令 现成的有 nload 安装 yum -y install nload 查看所有网卡实时网速 sudo nload -m 按enter/上下翻页键即可切换网卡 查看指定网卡实时网速 sudo nload eth0 -m 基于nettraf编译的rpm包 当然也可以你…

MySQL:如果用left join的话,左边的表一定是驱动表吗

一、前言 在日常开发过程中关于MySQL的优化方面&#xff0c;我们知道小表驱动大表原理。例如left join&#xff0c;放在左边的表作为驱动表。但是用left join的话&#xff0c;左边的表一定是驱动表吗&#xff0c;本文将通过案例分析给出详细分析。 二、概念 在MySQL中&#xf…