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

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

c 复制代码
#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

c 复制代码
#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

事件

相关推荐
观远数据23 分钟前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华26 分钟前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
IT笔记1 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
逝水无殇2 小时前
C# 运算符重载详解
开发语言·后端·c#
哥是强混2 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
ffqws_2 小时前
redis面试:如何保证双写一致
数据库·redis·缓存
TPBoreas2 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
水无痕simon2 小时前
6 数据库同义词
数据库
敲代码的嘎仔3 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
江华森3 小时前
Python 实现高德地图找房(一):环境搭建与数据爬虫
开发语言·爬虫·python