QT学习之路-记事本

2023-05-16

1、在创建记事本之前先明白有哪些功能:
先创建一个菜单栏,菜单栏是用来装各种功能的一个地方在这里插入图片描述如上图所示,文件、编辑所在的地方为菜单栏,

//创建菜单栏
    QMenuBar *menubar=menuBar();

菜单栏创建好后再创建菜单,菜单在菜单栏里面,
那么很明显,“文件”,“编辑”等就是菜单。
创建命令如下:

//创建菜单
    QMenu *file=new QMenu("文件",this);
    menubar->addMenu(file);
    QMenu*editor=new QMenu("编辑",this);
    menubar->addMenu(editor);

使用addMenu把菜单放进菜单栏里面,这里可以先去帮助文档里面查找QMenu 有哪些属性和方法。
菜单创建好之后再创建菜单项,菜单项就是菜单里的各个功能,
创建方法如下:

//创建菜单项
    QAction *open=new QAction("打开",this);
    QAction *save=new QAction ("保存",this);
    file->addAction(open);
    file->addAction(save);

这里如果不知道怎么做,或者不知道用啥命令创建菜单项,可以在另外一个新建的创口中在.ui文件中先手动添加,然后看他是用的啥命令,
在这里插入图片描述之后可以创建工具栏,工具栏的作用是可以显示菜单里面的菜单项,创建方法也可以通过上图的方式先查找,然后再手动添加,加深记忆哈哈。

  QToolBar *toolbar=ui->mainToolBar;
    toolbar->addAction(open);
    toolbar->addAction(save);

如果不知道是否可以添加,可以打开索引查找:
在这里插入图片描述查找后发现添加命令是addAction.
这就把菜单项里面的内容添加到工具栏里面了,可以按照需要添加。
然后就是文本编辑器,先添加头文件#include<QTextEdit>,注意,有单行的和多行,这里选择添加多行的。
这里是在.ui文件中收动添加的。在这里插入图片描述所以这里用ui的指针获取文本框。

 text=ui->textEdit;
setCentralWidget(text);

获取之后在索引里面查找QMAinWindow查找属性,把文本框设置为核心部件,不然的话当你拖动窗口是,文本编辑框的大小不会随着改变。
这里的“打开”、“保存”、“编辑”等就是信号,我们点击他们就是触发了这个信号。
2、槽函数
以上准备工作就完成了,剩下的就是当我们点击打开这个菜单项时,可以触发指令,也就是说点击“打开”可以打开我们想要的文件夹。
槽函数现在头文件中的公共区域声明
在这里插入图片描述这里我们需要手动添加public slots:这个公共的槽变量。然后在里面先添加我们第一个槽函数,

void openfile();

这个槽函数声明已经完成了,那么我们需要在.cpp文件中定义这个槽函数,
首先我们要明白这个槽函数需要完成那些动作,因为信号发出后给槽函数,槽函数需要完成一些列你想要的动作。
我们的记事本想要的就是打开文件,把文件里面的内容读到文本编辑器中。
这里就需要添加一个头文件,这个头文件是一个文件对话框,也就是说通过他,我们可以打开一个对话框,那么什么是对话框呢?
在这里插入图片描述这就是一个对话框,我是这样理解的:我们与机器之间的交流的,百度百科说:在用户界面,想用户显示信息的。
首先需要添加文件对话框的头文件#include<QFileDialog>
我们还是可以在索引里面查找对话框的各个属性和方法。

void MainWindow::openfile()
{
    QString filepath=`QFileDialog::getOpenFileName`(this,"记事本打开文件","D:/","*.txt");
    if(filepath.isEmpty())
    {
    qDebug()<<"空文件夹"<<endl;
    }
    else
    {
        QFile file(filepath);//创建文件对象
        if(file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QByteArray array=file.readAll();
            QString str(array);
            qDebug()<<str<<endl;
            text->setText(str);
            file.close();
        }
    }
}

上面代码的第一行QFileDialog::getOpenFileName是打开文件对话框,获取文件的名字(路径),里面的第三个参数是默认打开哪一个文件对话框,我这里设置的是D盘,最后一个是筛选打开的类型,这里设置的是只保留.txt文件,其余的不打开。
我们按照索引的介绍使用这个文件对话框,先查属性,如下图
在这里插入图片描述可以看到返回的是一个QString类型,所以,我们需要用QString类型接收,如果你想知道返回的到底是啥,你可以用下边这行查看返回值。你回发现真是一个txt文件的路径+txt的名字。

qDebug()<<filepath<<endl;

文件对话框已经获取了文件的完整路径了,但是还没有文件呢,那么接下来该干啥呢?
接下来就该创建文件了,这里要先添加头文件#include<QFile>
使用QFile file(filepath)创建一个文件,这里要把文件的路径名放里面,按照文档上的说明也就是:用给定的父对象构造一个新的文件对象。
同样的,查找QFile 文档属性和方法。得知文件有个open属性,返回的是bool类型的值,open中设定打开文档的方式,这里设定只读(从文档里面读)和换行(读完一行换下一行)。

file.open(QIODevice::ReadOnly | QIODevice::Text)

接下来就是设定读取多少,这里继续查,先查QFile 看有没有读得方法,如果没有就去QFile 的父类中去找
在这里插入图片描述查找一圈后发现没有,那就继续在QFileDevice的父类中找。
在这里插入图片描述最后发现有,并且返回值是QByteArray类型的(也就是数组)在这里插入图片描述既然返回值是一个数组,那么我们就需要用QByteArray创建一个数组去接收。
向text文档中写数组肯定是不行的,要将数组转为字符串类型使用QString,
最后向text中写入内容,想文档编辑器中写入使用的命令为:setText();
记得打开文档之后要用close关闭。
到这里,文件文档的读取的槽函数已经完成了,但是千万不要忘记,要是用connec将信号和槽函数关联起来,这样才是正确的,如下:

connect(open,&QAction::triggered,this,&MainWindow::openfile);

信号发送者是:open,信号的动作是triggered,触发的意思。接受者:MainWindow下的openfile函数,也就是槽函数。
到此这打开的功能算是完成了,但是有一点是要记住,text这个变量要放在头文件的public里面,设置成全局变量,因为下面的两个槽函数要用,如果设置成局部变量的话,两个函数没有访问权限。
按照上边的流程,保存的槽函数也是同样的道理;
但是要替换几个函数,替换成getSaveFileName,看名字可以理解的,QIODevice::WriteOnly这里是只写,因为我们要读编辑器里面的内容写到文档里面。
这里要是用文本编辑流,QTextStream,也可以查索引知道如何使用。使用QTextStream 构造一个文本流对象in,把stdin传入,也就是stdin变成文本流,然后想文本流中输入内容,使用>>(输入符号)。
在这里插入图片描述
从text文档编辑器中读取内容,以字符串的形式返回。
使用setCodec(“UTF-8”)设置中文编码,不然输入中文会乱码。
最后在向文档中输入 text->setText(“”)即可清空所有内容。别忘了关闭文件夹。

 QString textfile=text->toPlainText();
void MainWindow::savefile()
{
    QString path=QFileDialog::getSaveFileName(this,"保存文件","D:/","*.txt");
    if(path.isEmpty())
    {
        qDebug()<<"空文件夹"<<endl;
    }
    else
    {
        QFile file(path);
        if(file.open(QIODevice::WriteOnly | QIODevice::Text))
        {
            QString textfile=text->toPlainText();//以文本的形式返回文本编辑的文本,从编辑器中读取内容
            QTextStream  out(&file);
            out.setCodec("UTF-8");//设置中文编码
            out<<textfile<<endl;
            text->setText("");//向编辑器中输入内容
            file.close();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT学习之路-记事本 的相关文章

  • 解决arm-none-eabi-gcc交叉编译helloworld程序segmentation fault 错误

    目标 xff1a 在x86 64主机上 windows 10或ubuntu 20 04 上交叉编译arm架构的helloworld程序 xff0c 然后通过scp将编译完的可执行文件传给树莓派4B xff0c 在树莓派上执行该程序 xff0
  • 中断方式及DMA工作详解

    一 轮询方式 对I O设备的程序轮询的方式 xff0c 是早期的计算机系统对I O设备的一种管理方式 它定时对各种设备轮流询问一遍有无处理要求 轮流询问之后 xff0c 有要求的 xff0c 则加以处理 在处理I O设备的要求之后 xff0
  • 构成帧的方法

    组帧 组帧的原因是为了在出错的时候只需要重发出错的帧 xff0c 而不需要重发全部数据 xff0c 从而提高效率 为了能让接收方正确地接收并检查所传输的帧 xff0c 发送方必须依据一定的规则把网络层传下来的分组封装成帧 这个动作称为组帧
  • AUTOWARE下底盘CAN通讯实现

    无人驾驶系列 autoware与底盘CAN通讯实现 本文介绍在使用autoware时 xff0c 如何将autoware发送的消息传输给底盘 xff0c 实现对线控底盘的控制 准备工作 xff1a 1 系统具备ROS和autoware 2
  • Boost库安装与使用

    Boost 库很不错 xff0c 所以我今天就安了它一下下 Boost 库不是 C 43 43 标准库的一部分 xff08 据说在下一版本的 C 43 43 标准会采纳它 xff09 xff0c 但它有一些标准库所没有的很有用的一些功能 x
  • ROS Ubuntu20.04多版本opencv运行及bug解决

    ubuntu系统装有多个版本opencv使用方法及可能出现的问题 xff1a 单opencv版本时使用命令 xff1a find package OpenCV 3 2 REQUIRED 其默认是在user local 目录下安装的openc
  • UDP编程

    一切以包裹为中心 xff0c 字节数组为核心 一 UDP的基本步骤 xff1a 1 xff09 发送端 package com sxt udp import java net DatagramPacket import java net D
  • LWIP之lwip_select函数使用

    本测试基于lwip2 1 2 参考了CSDN博主 64 则强 的文章 原文链接 xff1a https blog csdn net baidu 39191253 article details 127630186 部分地方做了修改 xff0
  • 直流无刷电机的调试与代码开源(配套资源)

    本周对手头的一款大疆M3508直流无刷电机调试的相关内容进行整理及个人的代码进行分享 一 M3508直流无刷电机 直流无刷电机的工作原理此处不做阐述 xff0c 相关资料也易查询 1 1电机结构与连接样式图 1 2电机参数 具体不多加阐述
  • Linux网络编程——UDP编程

    文章目录 前言一 udp编程相关函数1 socket函数2 bind函数3 sendto函数4 recvfrom函数5 close函数 二 实际案例总结 前言 1 UDP通信协议 xff0c 服务器端和客户端无需建立连接 xff0c 只需要
  • c++ vector用法 入门必看 超详细

    1 vector的作用 vector是最常用的容器之一 xff0c 功能十分强大 xff0c 可以储存 管理各种类型的数据 在很多情况下可以用来代替功能比较局限的普通数组 xff0c 因为我们知道 xff0c 普通数组只能实现一对一的映射而
  • 比特(bit)和字节(byte)

    比特 xff08 bit xff09 和字节 xff08 byte xff09 比特 一个0或者一个1存储为一个bit xff0c 是计算机中最小的一个存储单位 字节 计算机中最基本的存储单元是字节 xff0c 一个字节是由8个比特构成的
  • 图形化界面如何给画笔加粗

    public void actionPerformed ActionEvent e String bstr 61 e getActionCommand 获得该组件上的文本内容 xff1b str 61 e getActionCommand
  • 在Ubuntu18.04上面安装VMware-tools实现屏幕适配(保姆级别操作)

    默认在虚拟机上面安装了Ubuntu xff0c 如果没有安装点击下面链接 xff0c 对照教程安装即可 注意每个人需要的Ubuntu的版本不一样安装自己的需要下载就行不要完全照着教程来 http t csdn cn Q1r0d 看自己需要安
  • ipv6的一些特殊地址

    2008年7月3日第二次修正 xff01 昨天是修正了地址部分 xff0c 本想发上来的 xff0c 没来得及 今天修正了NDP协议 xff0c 接下来会是路由和转换部分 总结一下各协议的精华 xff1a OSPF在于LSA xff0c B
  • VMware上面实现Ubuntu和Windows文件的复制粘贴功能(以及虚拟机当中插入U盘能够显示)

    一 xff1a 安装VMware tools工具 点击以下链接有详细的教程和操作 xff08 如何在Ubuntu18 04上面安装VMware tools xff09 http t csdn cn is6rZ 二 xff1a 实现Windo
  • IDEA当中System.out.println输出中文乱码,以及控制台中文文字乱码的解决方案

    操作步骤如下 1System out println在控制台输出中文乱码的解决 xff08 原因分析 xff09 因为System out读取系统使用GBK编码输出 xff0c 而IEDA控制台使用的是UTF 8解码 xff08 解决方法
  • rosdep update延时问题最简单方法解决和ros一键下载

    ros一键下载 点击链接即可参考博客教程安装 http t csdn cn HqtoN rosdep update延时问题解决 xff08 time out xff09 方法一 xff1a 第一步 xff1a sudo apt get in
  • Typora基础操作

    Typora操作教程 文章目录 Typora操作教程一 xff1a Markdown语法1 1标题 1 2字体1 3线1 4列表1 5区块1 6代码1 7链接1 8图片二 xff1a Typora与数学公式2 1各种符号的实现2 2各种特殊
  • Tomcat下载和配置详细

    Tomcat下载和配置 1 下载Tomcat安装包 Tomcat下载地址 xff1a https tomcat apache org 点击圈画部分下载安装包 在这里插入图片描述 https img blog csdnimg cn 5b033

随机推荐

  • 【嵌入式知识08】STM32的USART串口通信,给上位机连续发送Hello Windows!

    本文主要介绍串口协议和RS 232 485标准 xff0c 以及RS232 485电平与TTL电平的区别 xff0c 了解 34 USB TTL转232 34 模块的工作原理 xff1b 并完成一个STM32的USART串口通讯程序 本文目
  • dm-vio-ros的安装(详细)

    前言 dm vio安装 参考博客 SLAM DM VIO ros版 安装和论文解读 在安装过程中 xff0c 有些地方提示的不是很清楚 xff0c 故写一篇记录避免再次犯错 在dm vio的一个子目录下创建ros工作空间 xff0c 如图所
  • C语言几种常见头文件,再也不怕用了函数不知道他“妈”的问题了!!!

    不完全统计 xff0c C语言标准库中的头文件有15个之多 xff0c 所以我主要介绍常用的这四个头文件stdio h xff0c string h xff0c math h xff0c stdlib h xff0c 以后用到其他的再做补充
  • K210与STM32之间的通信

    K210与STM32之间使用串口进行通信 K210 K210使用的开发环境是MaixPy IDE 具体解释见代码注释 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a span class token keyword impo
  • Linux多线程编程问题:对‘pthread_create’未定义的引用

    在Linux下进行多线程程序测试时出现如下问题 xff1a 对 pthread create 未定义的引用 collect2 error ld returned 1 exit status 问题原因 xff1a linux下调用子线程时会用
  • PROC系列之---/proc/pid/stat

    proc stat 包含了所有CPU活跃的信息 xff0c 该文件中的所有值都是从系统启动开始累计到当前时刻 root 64 localhost cat proc 6873 stat 6873 a out R 6723 6873 6723
  • realsense d435 launch中修改频率不好用

    警告提示 xff1a Given stream configuration is not supported by the device span class token operator span Stream Color Stream
  • RK1109/RK1126--人工智能NPU强劲算力芯片

    瑞芯微电子第四届 开发者之春 大会上 xff0c 针对视觉领域 xff0c 推出全新的视觉处理器RV1109 1126芯片 从下图中我们可以清晰的看出 xff0c 在2020年瑞芯微推出的产品主要是面向物联网人工智能 机器视觉和机顶盒领域
  • Makefile

    Makefile的引入及规则 使用keil mdk avr等工具开发程序时点点鼠标就可以编译了 xff0c 使用Keil xff0c MDK xff0c AVR等工具开发程序时点点鼠标就可以编译了 它的内部机制是什么 它怎么组织管理程序 怎
  • 转载知乎-深度可分离卷积

    深度可分离卷积
  • vgg16网络改深度可分离卷积

    原网络 span class token keyword class span span class token class name CNN0 span span class token punctuation span nn span
  • Dropout 丢弃函数的使用

    Class span class token class name USeDropout span span class token punctuation span nn span class token punctuation span
  • libtorch-resnet18

    与大家分享一下自己在学习使用libtorch搭建神经网络时学到的一些心得和例子 xff0c 记录下来供大家参考 首先我们要参考着pytorch版的resnet来搭建 xff0c 这样我们可以省去不必要的麻烦 xff0c 上代码 xff1a
  • Yolov5 -libtorch部署

    将python训练好的网络模型转为可以再libtorch上走的pth模型 xff0c 转换代码如下 xff1a 可以直接赋值粘贴 import argparse import sys import time sys span class t
  • c++ 关于error LINK2005: XXXX已经在 .obj 中定义“的问题

    代码很多的时候出现这个问题很棘手 xff0c 小号大量时间来排查问题 xff0c 所以一边学习一边记录学习中出现的问题 原因 xff1a 是因为编程习惯的问题 xff0c 直接在头文件 h中直接定义了变量或者函数 xff0c 然后A cpp
  • 使用vs2019将libtorch或者网络打包成dll

    最近在搞一个程序 xff0c 需要把libtorch打包成dll xff0c 让别人使用 xff0c 在网上找了好久都没只有找到合适的答案 xff0c 最后在一个博主大哥那里找到了 xff0c 很是感激这位大哥与我们分享自己的经验 xff0
  • 【无标题】 libtorch C++ vs2017 debug模式可以正确加载模型,release模式错误

    转发 xff1a libtorch C 43 43 vs2017 debug模式可以正确加载模型 xff0c release模式错误 https blog csdn net weixin 43862688 article details 1
  • targetcli

    Linux IO LIO Target is an open source implementation of the SCSI target thathas become the standard one included in the
  • libtorch-加载预训练模型出现No such serialized submodule: ‘xxx‘

    今天在用libtorch训练得时候 xff0c 想用预训练模型加速训练 xff0c 居然报错 xff0c 以为是模型得问题 xff0c 然后重新训练了一个模型 xff0c 作为预训练模型 xff0c 还是报错 xff0c 一时找不到原因 x
  • QT学习之路-记事本

    1 在创建记事本之前先明白有哪些功能 xff1a 先创建一个菜单栏 xff0c 菜单栏是用来装各种功能的一个地方如上图所示 xff0c 文件 编辑所在的地方为菜单栏 xff0c span class token comment 创建菜单栏