【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

事件

相关推荐
晨曦_子画2 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Black_Friend10 分钟前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
CSUC18 分钟前
【Qt】QTreeView 和 QStandardItemModel的关系
qt
秋意钟23 分钟前
MySQL日期类型选择建议
数据库·mysql
希言JY34 分钟前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
残月只会敲键盘34 分钟前
php代码审计--常见函数整理
开发语言·php
xianwu54335 分钟前
反向代理模块
linux·开发语言·网络·git
ktkiko1141 分钟前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
冷凝女子1 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf