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

news2024/11/15 21:11:18

之前我们学过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_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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();


      }









 }

效果演示

记事本

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

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

相关文章

【Vue3】Pinia store 组合式写法

【Vue3】Pinia store 组合式写法 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

Java EE基础知识点

前言&#x1f440;~ 上一章我们介绍了性能测试工具LoadRunner&#xff0c;今天开启新的篇章Java EE进阶相关的内容 框架 Maven 项目构建 依赖管理 依赖传递 依赖排除 Maven概念 Maven仓库 Maven 设置国内源 创建Spring Boot项目 Web服务器 如果各位对文章的内容感兴…

Flutter 3.24 对普通开发者有哪些影响?

哈喽&#xff0c;我是老刘 Flutter 3.24刚刚发布了。突然觉得时间过得好快。六年前刚开始使用Flutter 1.0的场景还在眼前。 随着Flutter团队老成员的回归和新成员的加入。 前段时间Flutter团队裁员的影响似乎也逐步消退了。 新版本发布的功能逐步回到了该有的状态。 这里盘点…

解决域名加别名后再代理或者映射到fastadmin项目

如果遇到微应用不想再添加或者不方便添加单独的二级域名时&#xff0c;就需要用到代理或者映射来进入到我们的微应用项目中。 可以修改route.php路由文件的下面这个参数 __alias__ > [别名 > 模块/控制器] 如图 然后再修改config.php文件里面的view_replace_str参数…

C++入门基础知识11

C 关键字 下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。 &#xff01;&#xff01;&#xff01;完整关键字介绍 &#xff08;下一篇博文中将详细罗列介绍&#xff09;

内网穿透:打破网络边界的神奇钥匙

在数字化时代&#xff0c;我们每天都在使用各种网络设备&#xff0c;但你是否曾想过&#xff0c;家里的智能摄像头、私人服务器或是游戏主机&#xff0c;如何能够在远离家的地方也能轻松访问&#xff1f; 这就需要涉及到内网穿透技术了。今天&#xff0c;我们就用简单的例子来揭…

coze 工作流使用

什么是工作流 工作流就是将一系列的逻辑节点串起来的流程&#xff0c;例如我们做一个爬虫&#xff0c;第一步先爬取网页内容&#xff0c;第二步数据清洗&#xff0c;得到我们想要的数据&#xff0c;第三步存到数据库。这里每步就是一个逻辑节点&#xff0c;她们之间有先后或是…

如何用不到一分钟的时间将Excel电子表格转换为应用程序

我们大多数人对电子表格又爱又恨。当企业需要分析数据、为决策过程提供信息并可视化信息时&#xff0c;Excel和Google Sheets是首选。这些文档非常容易创建&#xff0c;它们帮助我们以直接的方式构建相关的想法和适用的数据。除此之外&#xff0c;事情可能会变得一团糟。 对于…

服务注册中心--Eureka

一.Eureka概述 Eureka是一个基于REST的服务&#xff0c;主要用于AWS(Amazon Web Services 亚马逊云计算服务)云中的定位服务&#xff0c;以实现中间层服务器的负载平衡和故障转移在 Spring Cloud 微服务架构中通常用作注册中心, 我们称这个服务为 Eureka Server&#xff0c;还…

springboot学生作业管理系统---附源码14916

摘 要 在信息化社会中&#xff0c;人们需要针对性的信息获取途径。然而&#xff0c;由于不同角度和偏好的存在&#xff0c;人们经常只能获得特定类型的信息&#xff0c;这也是技术攻克难题之一。为了解决学生作业管理系统等问题&#xff0c;本研究通过分析和研究&#xff0c;设…

汽车免拆诊断案例 | 2011 款进口现代新胜达车智能钥匙系统有时失效

故障现象  一辆2011款进口现代新胜达车&#xff0c;搭载G4KE发动机&#xff0c;累计行驶里程约为26.3万km。车主进厂反映&#xff0c;有时进入车内按下起动按钮&#xff0c;发动机无法起动&#xff0c;且组合仪表黑屏。 故障诊断  接车后试车&#xff0c;车辆使用一切正常。…

Windows创建定时任务触发bat脚本 实现oracle数据库备份

Windows中的计划任务程序来触发oracle数据库备份脚本 任务计划程序 创建基本任务 填写名称、描述&#xff0c;下一步 触发任务&#xff1a;填写定时周期 操作&#xff1a;启动程序&#xff0c;选择要执行的bat脚本 点击完成&#xff0c;就能在任务列表中查看到我们刚才创…

【Linux】MySQL安装教程

Linux中MySQL安装教程 Step1&#xff1a;卸载系统自带的mysqlStep2&#xff1a;下载mysql8安装包Step3&#xff1a;上传mysql压缩包到 /opt 然后解压Step4&#xff1a;解压后按照如下顺序安装Step5&#xff1a;对mysql进行初始化Step6&#xff1a;修改mysql安装目录的所有用户和…

算法的学习笔记—在 O(1) 时间内删除链表节点

&#x1f600;前言 在链表操作中&#xff0c;删除节点是一个常见的操作。然而&#xff0c;如何在最短的时间内完成删除节点的操作是一个值得探讨的问题。通常情况下&#xff0c;删除链表节点需要遍历链表来找到目标节点及其前驱节点&#xff0c;时间复杂度为 O(N)。但是&#x…

【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧:get_json_object

【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧&#xff1a;get_json_object 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; …

stm32入门学习13-时钟RTC

&#xff08;一&#xff09;时钟RTC stm32内部集成了一个秒计数器RTC&#xff0c;用于显示我们日常的时间&#xff0c;如日期年月日&#xff0c;时分秒等&#xff0c;RTC的主要原理就是进行每秒自增&#xff0c;如果我们知道开始记秒的开始时间&#xff0c;就可以计算现在的日…

Redis操作--RedisTemplate(二)StringRedisTemplate

一、介绍 1、简介 由于存储在 Redis 中的 key 和 value 通常是很常见的 String 类型&#xff0c;Redis模块提供了 RedisConnection 和 RedisTemplate 的扩展&#xff0c;分是 StringRedisConnection 和 StringRedisTemplate&#xff0c;作为字符串操作的解决方案。 通过源码…

JVM二:JVM类加载机制

目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中&#xf…

江科大/江协科技 STM32学习笔记P21

文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换&#xff0c;非扫描模式连续转换&#xff0c;非扫描模式单次转换&#xff0c;扫描模式连续转换&#xff0c;扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…

Python图像背景去除

目录 &#x1f381;库的导入 &#x1f380;库的安装 &#x1f381;rembg库去除背景 &#x1f381;效果 &#x1f381;文末彩蛋 今天来介绍一个特别有趣的python库&#xff0c;rembg库&#xff0c;全称是“Remove Background”的缩写&#xff0c;意为“去除背景”&#xff…