鱼C论坛

 找回密码
 立即注册
查看: 3500|回复: 1

[技术原创] 记事本

[复制链接]
发表于 2014-11-7 16:18:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ~风介~ 于 2015-10-30 17:42 编辑

代码:
类名:Notepad
基类:QWidget
==================
//notepad.h
#ifndef NOTEPAD_H
#define NOTEPAD_H

#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
#include <QGridLayout>
#include <QTextStream>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
class QPushButton;
class QTextEdit;
QT_END_NAMESPACE

class Notepad : public QWidget
{
    Q_OBJECT

public:
    Notepad(QWidget *parent = 0);

protected:
    QPushButton *openButton;
    QPushButton *saveButton;
    QPushButton *exitButton;
    QTextEdit *textEdit;
    QTextEdit *tmpEdit;

private slots:
    void openFile();
    void saveFile();
    void enableSave();


};

#endif // NOTEPAD_H
==================
//notepad.cpp
#include "notepad.h"

Notepad::Notepad(QWidget *parent)
    : QWidget(parent)
{

    //设置按钮、文本框
    openButton = new QPushButton(tr("Open"));
    saveButton = new QPushButton(tr("Save"));
    saveButton->setEnabled(false);
    exitButton = new QPushButton(tr("Exit"));
    textEdit = new QTextEdit;
    //用来保存地址信息
    tmpEdit = new QTextEdit;

    //实例化网格布局并加入组件
    QGridLayout *mainLayout = new QGridLayout;

    mainLayout->addWidget(openButton,1,0);
    mainLayout->addWidget(saveButton,1,1);
    mainLayout->addWidget(exitButton,1,2);
    mainLayout->addWidget(openButton,1,0);
    mainLayout->addWidget(textEdit,2,0,2,3);
    setLayout(mainLayout);
    //设置信号和槽
    connect(openButton,SIGNAL(clicked()),this,SLOT(openFile()));
    connect(saveButton,SIGNAL(clicked()),this,SLOT(saveFile()));
    connect(exitButton,SIGNAL(clicked()),this,SLOT(close()));
    connect(textEdit,SIGNAL(textChanged()),this,SLOT(enableSave()));
    //设置标题、大小
    setWindowTitle("Notepad");
    resize(600,600);
}

void Notepad::openFile()
{
    int reply = 0;
    //如果文件已经被修改,弹出对话框
    if(saveButton->isEnabled())
    {
        reply = QMessageBox::question(this,tr("Question"),
                                      tr("What to do about unsaved changes?")
                                      ,QMessageBox::Save | QMessageBox::Discard
                                      | QMessageBox::Cancel,QMessageBox::Save);
        switch(reply)
        {
            case QMessageBox::Save:
                saveFile();
                saveButton->setEnabled(false);
                break;

            case QMessageBox::Discard:
                saveButton->setEnabled(false);
                break;

            default:
                break;
        }
    }
    //
    if(QMessageBox::Cancel != reply)
    {
        //获取文件地址
        QString pathName = QFileDialog::getOpenFileName(this,tr("Open File"),".",tr("*.txt *.py"));
        //如果文件非空
        if(!pathName.isEmpty())
        {
            //把文件地址保存到tmpEdit
            tmpEdit->setText(pathName.toUtf8());
            QFile file(pathName);
            if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                QMessageBox::warning(this,tr("Read File"),tr("Cannot open file:\n%1").arg(pathName));
                return;
            }

            QTextStream out(&file);
            //指定编码方式为utf-8
            out.setCodec("utf-8");
            QString text;
            //当文件为结束时,读入textEdit中,并禁用save按钮
            while(!out.atEnd())
            {
                text = out.readAll();
                textEdit->setPlainText(text);
                saveButton->setEnabled(false);
            }
            file.close();\
        }
        else
        {
            QMessageBox::warning(this,tr("Path"),tr("You did not select any file."));
        }


    }

}

void Notepad::saveFile()
{
    //打开文件并写入,并禁用save按钮
    QFile file(tmpEdit->toPlainText());
    file.open(QIODevice::ReadWrite | QIODevice::Text);
    QByteArray str = textEdit->toPlainText().toUtf8();
    file.write(str);
    file.close();
    saveButton->setEnabled(false);
 }

void Notepad::enableSave()
{
   saveButton->setEnabled(true);
}
==================
//main.cpp
#include "notepad.h"
#include <QApplication>

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

    return a.exec();
}

截图:


1.png

2.png

3.png


评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
拈花小仙 + 5 + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-25 11:58:41 | 显示全部楼层
要了要了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表