【qt】QMainWindow下实现一个记事本

ops/2024/9/20 7:16:18/ 标签: qt, 数据库, 开发语言

之前我们学过QWidget,QMainWindow会在ui界面多一个菜单
在这里插入图片描述

先实现ui界面

1.添加文本编辑,实现可以写多行
在这里插入图片描述
2.将文本编辑放大,拖动即可
在这里插入图片描述
3.编辑菜单栏
在这里插入图片描述
4.然后我们要实现对应子列表的功能,但是在这里不能转到槽,所以我们只能通过connect来联系功能和对应按键,我们先给我们的子列表对象重命名一下

在这里插入图片描述

代码部分

1.实现新建文件
定义一个槽函数实现新建文件的槽函数,然后在构造函数中connect,联系点击新建,执行槽函数,
槽函数中要做的功能是将标题设置为无标题,然后文本内容清空
在这里插入图片描述
2.实现打开文件,同样是声明槽函数,实现关联connect,实现槽函数
在这里插入图片描述
槽函数中要做的是使用QFileDialog类中一个函数getOpenFileName,来打开一个文件,返回打开文件的路径字符串,如果为空的话,就显示一个消息盒子警告没有选择上,也就是按了取消以后会提醒,如果选择的话,创建一个文件用读方式打开他,使用readAll函数读取该文件内容到QByteArray 中,你可以把他当做vector, 然后写入到ui界面的文本编辑中,向文本编辑中写入时,必须是QString,QString中有个构造函数直接将QByteArray转为QString,然后关闭文件
在这里插入图片描述

在这里插入图片描述
3.实现保存功能
完成保存文件槽函数声明,实现槽函数和保存按键关联connect,实现槽函数
槽函数的实现需要QFileDialog类中的函数getSaveFileName函数来获取要保存文件的地方,返回值为要保存在哪个地方的字符串,如果字符串为空,说明没有选择保存路径,如果有的话,打开该文件,以读的方式,将文本编辑内容读到QByteArray (vector)中,然后从vector中读取内容到文件中去,关闭文件
在这里插入图片描述
槽函数实现:
在这里插入图片描述

源码分享

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QString>
#include<QFileDialog>
#include<QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
private slots:void Newfilespots();void Openfilespots();void Savefilespots();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->Newfile,&QAction::triggered,this,&MainWindow::Newfilespots);connect(ui->Openfile,&QAction::triggered,this,&MainWindow::Openfilespots);connect(ui->Savefile,&QAction::triggered,this,&MainWindow::Savefilespots);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::Newfilespots()
{ui->textEdit->clear();this->setWindowTitle("无标题");}
void MainWindow::Openfilespots()
{QString filename=QFileDialog::getOpenFileName(this,"选择一个文件",QCoreApplication::applicationFilePath(),".txt");if(filename.isEmpty()){QMessageBox::warning(this,"警告","请选择一个文件");}else{QFile file(filename);file.open(QIODevice::ReadOnly);QByteArray ba=file.readAll();ui->textEdit->setText(QString(ba));file.close();}}void MainWindow::Savefilespots(){QString filename=QFileDialog::getSaveFileName(this,"选择一个文件",QCoreApplication::applicationFilePath(),".txt");if(filename.isEmpty()){QMessageBox::warning(this,"警告","请选择一个文件");}else{QFile file(filename);file.open(QIODevice::WriteOnly);QByteArray ba;ba.append(ui->textEdit->toPlainText());file.write(ba);file.close();}}

效果演示

记事本

事件

qt中我们还可以捕捉键盘信息和鼠标信息,我们可以重写虚函数实现对应键盘信息,鼠标信息做出我们自己的需求.
我们基于上节课代码我们要实现Ctrl+s实现文本的保存功能
首先包含头文件QKeyEvent,在.h中声明重写的虚函数,在.cpp中实现重写的虚函数
在这里插入图片描述
在这里插入图片描述
鼠标事件捕捉
在这里插入图片描述
虚函数重写
在这里插入图片描述


http://www.ppmy.cn/ops/93720.html

相关文章

关于自己部署AI大模型踩的坑(一)——硬件篇

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.&#xff08;钢铁侠中的机器人管家&#xff09;。 上一篇写了我最近在部署自己的大模型&#xff0c;使用llama3.1&#xff0c; 和通义千问2。虽然最终结果也是成功了&#xff0c;过程却十分地坎坷。 所以这一篇文章一是总结其中…

uniapp版本更新除了plus.runtime.getProperty的解决办法

以下是展示图 带尺寸的图片: 首先把以下代码放到想要更新弹出的页面 //template部分<uni-popup ref"popup" background-color"#fff"><versionUp handleCloseVersion"closeVersion"></versionUp></uni-popup>//script…

Mysql——对数据基本操作(增删查改)——操纵语言(DML)

之前的创建数据库和创建表&#xff0c;类型、约束都是用的DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构 代表指令: create, drop, alter 那么现在我们来学习数据操纵语言 DML【data manipulation language】 数据操纵语言&#xff0c;用来…

使用Selenium爬取网络页面

在现代网络数据分析和自动化测试中&#xff0c;Selenium 是一个强大而流行的工具。它不仅可以帮助开发者自动化浏览器操作&#xff0c;还能用于爬取网络页面。本文将介绍如何使用 Selenium 爬取网络页面&#xff0c;包括基本设置、常用操作及一些实用的技巧。 一、什么是 Selen…

腾讯cdg提前批一面0726

介绍项目 黑马商城 为什么使用rabbitmq 用于异步更新订单 扣减余额后异步更新订单失败怎么办 分布式事务回滚 什么是接口幂等性&#xff0c;怎么实现 接口幂等性是指同一个接口在短时间点击多次都之后返回只执行一次的结果。 Token机制&#xff1a; 生成Token&#xff1a;在客户…

点赞功能开发

文章目录 1.点赞收藏功能设计1.示意图2.描述1.使用redis记录的数据2.数据库的设计3.功能设计1.新增点赞2.取消点赞3.查询当前题目被点赞的数量4.查询当前题目被当前用户是否点过赞5.我的点赞 2.代码生成器的使用1.找到代码生成器在磁盘的位置&#xff0c;直接复制到项目下2.导入…

微信小程序中实现自动滚动

使用scroll-view组件的scroll-into-view属性&#xff1a; <scroll-view class"container" scroll-y"{{true}}" scroll-into-view"recordBottomScroll"><view class"text_style" style"color: #252526;">{{te…

16 交换机命令行配置

交换机命令行配置 一、交换机命令行基本配置 &#xff08;一&#xff09;配置主机名 Switch>enable Switch#configure terminal Switch(config)#hostname S1&#xff08;二&#xff09;查看配置信息 Switch#show running-config Building configuration...Current confi…

SpringBoot配置

目录 yaml基本含义 yaml基本语法 yaml数据格式 实操 yaml:参数引用 小结 yaml基本含义 通过对比不同配置文件写法&#xff0c;就可以发现yaml配置文件&#xff0c;更加注重数据本身 原因 1 比properties配置文件&#xff0c;更加注重层级关系 2 和xml文件比起来&#xff…

【Unity-UGUI】UI重建

UGUI UI重建二三事(一) UGUI UI重建二三事(二) [UGUI源码二]Unity UI重建(Rebuild)源码分析 这一部分主要是通过以上几篇文章学习的&#xff0c;总结一下&#xff1a; UI重建主要分类两类&#xff0c;一类是布局重建(Layout Rebuild)&#xff0c;另一类是图形重建(Graphic Reb…

jar包扫描不到,idea如何通过Project Structure设置

目录 一、进入Project Structure二、添加你的项目进来三、手动添加依赖 很多时候jar包文件已经存在&#xff0c;但是无法使用&#xff0c;需要通过Project Structure设置 一、进入Project Structure 选择Modules->点击 二、添加你的项目进来 一直next&#xff0c;最后点…

git推送错误:Failed to connect to github.com port 443

今天在push代码到github的时候遇到了错误&#xff1a;fatal: unable to access https://github.com/ShangyiAlone/FacemaskDetection.git/: Failure when receiving data from the peer 网上搜了下教程&#xff0c;是开启梯子的时候代理服务器的问题&#xff0c;开启梯子的时候…

【Python SHA256 摘要算法】

SHA256 是一种广泛使用的密码散列函数&#xff0c;用于生成数据的唯一指纹&#xff0c;即散列值。它属于SHA-2家族&#xff0c;该家族还包括 SHA-384 和 SHA-512 算法。SHA256 算法在许多领域都有应用&#xff0c;例如&#xff1a; 数据完整性验证&#xff1a;用于验证数据在传…

使用 Flask、Celery 和 Python 实现每月定时任务

为了创建一个使用 Flask、Celery 和 Python 实现的每月定时任务&#xff0c;我们需要按照以下步骤进行&#xff1a; 1.安装必要的库 我们需要安装 Flask、Celery 和 Redis&#xff08;作为消息代理&#xff09;。我们可以使用 pip 来安装它们&#xff1a; bash复制代码 ​ p…

C++ | Leetcode C++题解之第331题验证二叉树的前序序列化

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isValidSerialization(string preorder) {int n preorder.length();int i 0;int slots 1;while (i < n) {if (slots 0) {return false;}if (preorder[i] ,) {i;} else if (preorder[i] #){slots--;i…

Ubuntu 将更改版本规则,使用最新内核发布发行版

众所周知&#xff0c;Canonical 开发的 Ubuntu 发行版每半年发布一个新版本&#xff0c;而 Linux 内核却是大约每 2-3 个月发布一个新版本。 这导致一个问题&#xff0c;Ubuntu发行版永远使用的不是最新内核。因为按照Ubuntu的开发周期&#xff0c; Ubuntu 开发阶段选择使用的…

zookeeper集群搭建Windows 7

在 Windows 7 操作系统上搭建 ZooKeeper 集群是可行的,但是由于 Windows 7 是一个较旧的操作系统,可能缺少某些现代的功能或者安全性更新。尽管如此,你仍然可以在 Windows 7 上搭建一个 ZooKeeper 单服务器三节点集群用于测试和学习目的。 下面是针对 Windows 7 系统的步骤…

C# TreeView

添加 TreeView 控件&#xff1a;定义节点&#xff1a;添加节点&#xff1a;设置节点属性&#xff1a;处理节点事件&#xff1a;自定义节点绘制&#xff1a;数据绑定&#xff1a;节点选择&#xff1a;节点展开和折叠&#xff1a;搜索和过滤&#xff1a;示例代码总结 C# 中的 Tre…

C#加载toolblock工具

VisionPro QuickBuild工具 VisionPro QuickBuild是康耐视旗下的与相机配套的软件&#xff0c;主要是设计了一些底层算法&#xff0c;免去了开发者要进行底层开发的工作量&#xff0c;而其中的ToolBlock工具相当于一个函数&#xff0c;可以在这个函数里面完成你想完成的功能&…

nvm下载node时没有下载npm问题的解决

问题&#xff1a; 使用nvm下载node版本时,没有自动下载npm 1&#xff0c;卸载指定的版本 nvm uninstall "版本号" 2&#xff0c;设置npm的镜像地址&#xff08;将npm的地址指定为淘宝镜像&#xff09; nvm npm_mirror https://npmmirror.com/mirrors/npm/ 3&…