王逗比666 发表于 2020-8-27 19:27:34

用qt写的一个小记事本

本帖最后由 王逗比666 于 2020-8-27 19:30 编辑

先前声明:本文无任何干货,如有错别字请见谅

学习连带制作耗时三天(有相当一部分时间是在和别人吹水),做出来的也只是一个雏形(还有一堆Bug),主要是在闲聊的时候那位老哥说了一句:
https://fishc.com.cn/forum.php?mod=image&aid=132981&size=300x300&key=5da87440081ec86a&nocache=yes&type=fixnone然后我就跑路了,不然就这么一个东西今天都不一定能做出来
里面目前能体验到最大的一个问题就是打开文件的时候那个打开窗口会弹出两次,第二次才能真正打开文件,由于技术原因。。。。算了以后如果能做到我尽量改(这个问题使得如果你将其作为txt文件的打开方式你都无法成功打开,虽然应该没有人会这么做)
https://fishc.com.cn/forum.php?mod=image&aid=132983&size=300x300&key=f1113742b30c1a37&nocache=yes&type=fixnone然后这东西就长这样(???为什么我这边看这个图片这么小)
不仅取了个大言不惭臭不要脸的名字而且长得还很丑。。。功能很简单,到时候如果有人原意试的话可以试试(右边那个工具栏是居中这种简单的设置),至于为什么要用英文,不是我要炫耀自己英文好而是这个神奇的qt先是一有中文就报错然后又是识别不正确中文{:10_284:}(不过中文文本我试了下,应该可以正常写如读取的,应该。。。吧),看上面的工具栏也能知道这个编辑器支持换字体和颜色(至于效果大家可以试试),后续打算加一下下划线之类的功能。然后我将它打包后发现这么小一个东西加了那些必备的文件之后就有40M
https://fishc.com.cn/forum.php?mod=image&aid=132986&size=300x300&key=b08a8f79c22bf42c&nocache=yes&type=fixnone
https://fishc.com.cn/forum.php?mod=image&aid=132988&size=300x300&key=36ef4955124811be&nocache=yes&type=fixnone(???为什么这两张图我这边看还是这么小)

那么就不说废话了,我用的环境是qt5.15.0 MVSC 2019 32-bit(如果写错了大家会下意哈),接下来是源码:

//main.cpp
#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.setWindowTitle("Edit-db");

    w.show();

    //更改字体大小
    QFont font=w.font();
    font.setPointSize(10);
    w.setFont(font);
    //更换字体
    font.setFamily("Consolas");

    return a.exec();
}
//mainwindow.cpp

#include "mainwindow.h"
#include <QTextEdit>
#include <QMenuBar>
#include <QToolBar>
#include <QFontDialog>
#include <QColorDialog>
#include <QDialog>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
#include <QTextBlock>
#include <QFile>
#include <QIODevice>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QMenuBar* bar = menuBar();
    setMenuBar(bar);

    //菜单栏选项
    QMenu* fileMenu = bar->addMenu("File");
    QMenu* editMenu = bar->addMenu("Edit");
    QMenu* versionMenu = bar->addMenu("Version");

    //子选项
    QAction* Open = fileMenu->addAction("Open");
    QAction* Save = fileMenu->addAction("Save");
    QAction* SaveAs = fileMenu->addAction("Save as");
    QAction* Exit = fileMenu->addAction("Exit");

    QAction* color = editMenu->addAction("color");
    QAction* font = editMenu->addAction("font");

    QAction* version = versionMenu->addAction("version");

    //工具烂
    QToolBar* toolBar = new QToolBar(this);
    QToolBar* toolBar2 = new QToolBar(this);
    addToolBar(Qt::RightToolBarArea, toolBar2);
    addToolBar(toolBar);

    //用于更改颜色和字体
    toolBar->addAction(color);
    toolBar->addAction(font);

    //toolBar2改变缩进
    QAction* AlignLeft = toolBar2->addAction("AlignLeft");
    QAction* AlignRight = toolBar2->addAction("AlignRight");
    QAction* AlignCenter = toolBar2->addAction("AlignCenter");
    QAction* AlignJustify = toolBar2->addAction("AlignJustify");
    QAction* AlignTop = toolBar2->addAction("AlignTop");
    QAction* AlignBottom = toolBar2->addAction("AlignBottom");
    QAction* AlignVCenter = toolBar2->addAction("AlignVCenter");

    setFixedSize(772, 642);
    QTextEdit* edit = new QTextEdit(this);
    setCentralWidget(edit);
    edit->resize(642, 542);

    connect(color, &QAction::triggered, [=] () {
      edit->setTextColor(QColorDialog::getColor(QColor(0, 0, 0)));
    });

    connect(font, &QAction::triggered, [=] () {
      bool flag;
      edit->setFont(QFontDialog::getFont(&flag,QFont("Consolas", 12)));
    });

    connect(Open, &QAction::triggered, [=] () {
      QFileDialog::getOpenFileName(this, " ", "C:\\", "(*.txt)");
    });

    connect(AlignLeft, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignLeft);
    });

    connect(AlignCenter, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignCenter);
    });

    connect(AlignRight, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignRight);
    });

    connect(AlignJustify, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignJustify);
    });

    connect(AlignTop, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignTop);
    });

    connect(AlignBottom, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignBottom);
    });

    connect(AlignVCenter, &QAction::triggered, [=] () {
      edit->setAlignment(Qt::AlignVCenter);
    });

    connect(version, &QAction::triggered, [=] () {
      //都没开发好哪里来的版本号
      ;
    });

    connect(Open, &QAction::triggered, [=] () {
       QString path =QFileDialog::getOpenFileName(this, "Open", "C:\\", "(*.txt)");
       QFile file(path);
      //QFile(aFileName);
       //QString lineStr;
       //lineStr = QFile::readAll(path);
       //edit->setPlainText(QString(file.readAll()));
       //QTextStream aStream(&file); //用文本流读取文件
       //edit->setPlainText(aStream.readAll());
       //file.close();//关闭文件

       if(!(edit->document()->isEmpty()))
       {
         if(QMessageBox::Save == QMessageBox::question(this, " ", "Save?", QMessageBox::Save | QMessageBox::Cancel))
         {
               QString fileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
                   if(fileName.isEmpty())
                   {
                        return;
                   }
                   QFile *file=new QFile;
                   file->setFileName(fileName);
                   bool ok=file->open(QIODevice::WriteOnly);
                   if(ok)
                   {
                     QTextStream out(file);
                     out<<edit->toPlainText();
                     file->close();
                     delete file;
                   }
                   else
                   {
                     QMessageBox::information(this,"Error Messaage","File Save Error"+file->errorString());
                     return;
                   }
                edit->clear();
         }

         else
         {
               edit->clear();
         }

         if(file.open(QIODevice::ReadOnly))
         {
         QTextStream read(&file);
         while(!read.atEnd() )
         {
         edit->append(read.readLine());
         }
         }
         file.close();

       }
       else
       {
         if(file.open(QIODevice::ReadOnly))
         {
         QTextStream read(&file);
         while(!read.atEnd() )
         {
         edit->append(read.readLine());
         }
         }
         file.close();
       }
    });

    connect(Save, &QAction::triggered, [=] () {
      QString fileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
            if(fileName.isEmpty())
            {
                return;
            }
            QFile *file=new QFile;
            file->setFileName(fileName);
            bool ok=file->open(QIODevice::WriteOnly);
            if(ok)
            {
                QTextStream out(file);
                out<<edit->toPlainText();
                file->close();
                delete file;
            }
            else
            {
                QMessageBox::information(this,"Error Messaage","File Save Error"+file->errorString());
                return;
            }
    });

    connect(SaveAs, &QAction::triggered, [=] () {
      QString fileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
            if(fileName.isEmpty())
            {
                return;
            }
            QFile *file=new QFile;
            file->setFileName(fileName);
            bool ok=file->open(QIODevice::WriteOnly);
            if(ok)
            {
                QTextStream out(file);
                out<<edit->toPlainText();
                file->close();
                delete file;
            }
            else
            {
                QMessageBox::information(this,"Error Messaage","File Save Error"+file->errorString());
                return;
            }
    });

    connect(Exit, &QAction::triggered, [=] () {
      if(!(edit->document()->isEmpty()))
      {
            edit->clear();
      }
    });

    //键盘按钮关联:
    Save->setShortcuts(QKeySequence::Save);
    Open->setShortcuts(QKeySequence::Open);
}

MainWindow::~MainWindow()
{
}
值得一提的是昨晚有个傻子傻乎乎的以为用纯代码开发这东西容错率会高一点就把之前写好的代码推倒重来(当然有用的全部拿来复制粘贴了),所以说这东西和ui界面一点关系都没有,有qt环境的创建个工程复制粘贴就好了(可能吧),然后那些奇奇怪怪的注释是我在技术水平不足的情况下跑去百度查一些一知半解的函数或者复制粘贴别人的代码留下的(然后那个时候我看到我的浏览器下面的一篇文章是说好程序员和坏程序员的,人家说的程序员大部分时间在思考和实验,坏程序员大部分时间在盲目测试{:10_266:}),最后不仅留下了废弃代码还留下了一堆bug(至于为什么没删就是为了之后改的时候如果能改掉那处的那个Bug找代码的时候醒目一点),别说了,我会努力的{:10_245:}

emmm啰里啰唆扯了一堆实际上还是因为自己有些激动,毕竟这也算是自己做出来的第一个能“看”的东西了(为了这东西我这两天坐在电脑前敲代码的时间不小于十个小时(虽然我可能是个“坏”程序员,但是如果真有人这么说我也算是认可我是个程序员了{:10_256:})),最后感谢一下出镜的那个老哥,他是谁我就不指名道姓了{:10_256:},那么不说了,我跑路了

叙白 发表于 2020-8-27 19:45:55

前排围观

Hello. 发表于 2020-8-27 20:32:55

weiter 发表于 2020-8-27 21:30:10

加一个隐藏吗?这样少很多白嫖怪的

王逗比666 发表于 2020-8-27 21:38:23

weiter 发表于 2020-8-27 21:30
加一个隐藏吗?这样少很多白嫖怪的

这种代码很简单,有心人最多花点时间无论是自己写还是请教别人都能弄到,我就是帮这些人省去了他们的时间而已,更何况这种简单不过的东西我放出来做了让我牟利的事情那我不就是太掉价了吗∩_∩

weiter 发表于 2020-8-27 21:42:35

王逗比666 发表于 2020-8-27 21:38
这种代码很简单,有心人最多花点时间无论是自己写还是请教别人都能弄到,我就是帮这些人省去了他们的时间 ...

加一个隐藏也就是不容易沉贴
不过我敬佩这种大佬思想{:10_278:}

王逗比666 发表于 2020-8-27 21:48:27

weiter 发表于 2020-8-27 21:42
加一个隐藏也就是不容易沉贴
不过我敬佩这种大佬思想

我不是大佬,帖子沉了就沉了,反正初衷就这个,纪念一下,而且这样说话比较容易装x{:10_256:}

小小の白 发表于 2021-4-21 20:41:32

{:10_256:}

hornwong 发表于 2021-7-3 14:34:02

{:5_95:}
页: [1]
查看完整版本: 用qt写的一个小记事本