6_3_notepad打开功能

1、效果

在这里插入图片描述

2、代码

2.1mainwidow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <subtext.h> //子界面,继承文本输入框
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void doProcessTriggeredByNew(bool);
    void doProcessTriggeredByOpen(bool);
    void doProcessTriggeredByUTF_8(bool);
    void doProcessTriggeredByGB2312(bool);
private:
    Ui::MainWindow *ui;
    QString codeName;
    void Init();
};

#endif // MAINWINDOW_H


2.2 subtext.h

#ifndef SUBTEXT_H
#define SUBTEXT_H

#include <QWidget>
#include <QTextEdit>
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QTextStream>//文本流
class subText : public QTextEdit
{
    Q_OBJECT
public:
    explicit subText(QWidget *parent = nullptr);

    //子类里实现功能
    void NewFile();//窗体新建
    void OpenFile();//打开文件
    void setCodeName(const QString codename);
signals:

public slots:
    void doProcesscontentsChanged();
private:
    QString filename;
    QFile *myfile;
    QString CodeName;
};

#endif // SUBTEXT_H


2.3 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //改变字体
    QFont font;
    font.setBold(true);//(加粗)
    font.setStyle(QFont::StyleOblique);//斜体
    ui->action_New->setFont(font);

     Init();
}

MainWindow::~MainWindow()
{
    delete ui;
}

/*function*/
void MainWindow::Init(){
    codeName = "UTF-8";
    //信号与槽
    connect(ui->action_New,SIGNAL(triggered(bool)),//triggered相当于单击新建事件
            this,SLOT(doProcessTriggeredByNew(bool)));
    connect(ui->action_Open,SIGNAL(triggered(bool)),
            this,SLOT(doProcessTriggeredByOpen(bool)));//打开文件事件
    connect(ui->actionUTF8,SIGNAL(triggered(bool)),
            this,SLOT(doProcessTriggeredByUTF_8(bool)));//绑定切换编码事件
    connect(ui->actionUTF8,SIGNAL(triggered(bool)),
            this,SLOT(doProcessTriggeredByGB2312(bool)));//绑定切换编码事件
}
/*function end*/


/*event*/

/*event end*/


/*slots*/
//新建action
void MainWindow::doProcessTriggeredByNew(bool){
    qDebug()<<"triggered New action"<<endl;
    subText *sub = new subText();   //创建子类
    ui->mdiArea->addSubWindow((QWidget *)sub); //在mdiArea里显示
    sub->setCodeName(codeName);//设置编码格式
    sub->NewFile();
    sub->show();                    //显示子类(子界面,继承文本输入框)
}

//打开action
void MainWindow::doProcessTriggeredByOpen(bool){
    qDebug()<<"triggered open action"<<endl;
    subText *sub = new subText();   //创建子类
    ui->mdiArea->addSubWindow((QWidget *)sub); //在mdiArea里显示
    sub->setCodeName(codeName);//设置编码格式
    sub->OpenFile();
    sub->show();                    //显示子类(子界面,继承文本输入框)
}

//编码切换
void MainWindow::doProcessTriggeredByUTF_8(bool){
    qDebug()<<"triggered UTF-8 action"<<endl;
   this->codeName = "UTF-8";
}
void MainWindow::doProcessTriggeredByGB2312(bool){
    qDebug()<<"triggered GB18030 action"<<endl;
   this->codeName = "GB18030";
}

/*slots end*/


2.4 subtext.cpp

#include "subtext.h"

//构造函数
subText::subText(QWidget *parent) : QTextEdit(parent)
{
  myfile = new QFile(this);
}

/*function*/

void subText::NewFile(){
    static int index=1;
    QString title =QString("未命名文档[%1][*]").arg(index);
    this->setWindowTitle(title);//设置窗体名字
    index++;
     //出于编辑后使用星号
    connect(this->document(),SIGNAL(contentsChanged()),this,SLOT(doProcesscontentsChanged()));//内容改变后‘*’显示
}

void subText::OpenFile(){
     QString filename = QFileDialog::getOpenFileName(this,"获取文本文件",".","Text(*.cpp *.txt *.h)");//打开文件对话框
     if(filename.isEmpty()){
         return;
     }
     //把文件路劲保持,文件设置到窗体
     this->filename = filename;

     //第一种获取文件名
//     QStringList list =filename.split("/");//字符串分割,以/分割
//     QString title = list.at(list.length()-1);//最后一个为文件名

     //第二种获取文件名
     QFileInfo info(filename);
     QString title = info.fileName();

     this->setWindowTitle(title);
    //对文件进行操作(用流的形式打开文件)
   myfile->setFileName(filename);
   bool ret=myfile->open(QIODevice::ReadOnly|QIODevice::ReadOnly);
   if(!ret){
       QMessageBox::warning(this,"打开文件失败","打开文件失败");
   }
   QTextStream stream(myfile);
   stream.setCodec(this->CodeName.toLocal8Bit().data());//编码格式
   while(!stream.atEnd()){
       QString str=stream.readLine();
       this->append(str);
       myfile->close();
   }
}
void subText::setCodeName(const QString codename){
    this->CodeName = codename;

}

/*function end*/

/*slots*/
void subText::doProcesscontentsChanged(){
    this->setWindowModified(true);
}
/*slots end*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值