【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

事件

相关推荐
小吴编程之路16 分钟前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
靓仔建24 分钟前
Vue3导入组件出错does not provide an export named ‘user_setting‘ (at index.vue:180:10)
开发语言·前端·typescript
~莫子27 分钟前
MySQL集群技术
数据库·mysql
凤山老林37 分钟前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
就不掉头发1 小时前
Linux与数据库进阶
数据库
与衫1 小时前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫1 小时前
Redis桌面客户端
数据库·redis·缓存
oradh1 小时前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
赶路人儿1 小时前
UTC时间和时间戳介绍
java·开发语言
6+h1 小时前
【java】基本数据类型与包装类:拆箱装箱机制
java·开发语言·python