qt编程实现的简易记事本(范例)

     Qt是一种跨平台的原生开发框架,面向所有主要的操作系统,包括Linux、Windows、Mac、Symbian和Maemo。本文介绍的是在Windows下用qt编程实现的简易记事本,有兴趣学习qt编程的可以看看。本人也是刚接触qt编程,觉得qt相对其他语言来说学起来还是比较容易的。
  这是我用Qt Creator实现的简易记事本:QQ迷你版 本地网络聊天软件详见Qt编程—我的QQ(局域网可用)—含源代码
上面界面是用Qt  Designer实现的
是不是在actionNew(新建)前面有出现小图标,在往工具栏里移动,就出现上述效果了。
 
        这只是实现了一部分功能,大家可以看一下
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void changeTitle(const QString &filename);
    void openfile(const QString &filename);
    void savefile(const QString &filename);


private:
    Ui::MainWindow *ui;
    QString curFile;
    QLineEdit *find_textLineEdit;

private slots:
    void show_findText();
    void on_action_2_triggered();//查找
    void on_plan_textEdit_copyAvailable(bool b);
    void on_plan_textEdit_textChanged();
    void on_action_U_triggered();//撤销
    void on_action_P_triggered();//粘贴
    void on_action_C_triggered();//复制
    void on_action_T_triggered();//剪切
    void on_actionExit_triggered();//退出
    bool on_actionSave_triggered();//保存
    bool on_actionSave_As_triggered();//另存为
    void on_actionOpen_triggered();//打开
    void on_actionNew_triggered();//新建
};

#endif // MAINWINDOW_H

main.h文件
#include 
#include 
#include "mainwindow.h"

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

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));


    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->changeTitle("");
    this->setCentralWidget(ui->plan_textEdit);
    //设置action的属性
    ui->action_T->setEnabled(false);
    ui->action_C->setEnabled(false);
    //设置界面图标
  this->setWindowIcon(QIcon(":/images/editor.png"));
}

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

void MainWindow::savefile(const QString &filename)
{
    QFile file(filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
        QMessageBox::warning(this, "Save",
                             tr("Save , error ?")
                             .arg(filename)
                            .arg(file.errorString()));
        return ;
    }
    QTextStream out(&file);
    out << ui->plan_textEdit->toPlainText();
    file.close();
}

void MainWindow::openfile(const QString &filename)
{
    QFile file(filename);
    if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
        QMessageBox::warning(this, "Open",
                             tr("Save , error ?")
                             .arg(filename)
                             .arg(file.errorString()));
        return ;
    }
    QTextStream in(&file);
    QString s=in.readAll();
    ui->plan_textEdit->setPlainText(s);
}
void MainWindow::changeTitle(const QString &filename)
{
    qDebug()<<"***"<curFile = "";
         this->setWindowTitle(tr("无标题.txt[*]--记事本"));
    }
    else{
        this->curFile = filename;
        QFileInfo fi(filename);
        QString name=fi.fileName();
        this->setWindowTitle(tr("%1[*]--记事本").arg(name));
        qDebug()<<"===="<setWindowModified(false);
    ui->plan_textEdit->document()->setModified(false);
}

void MainWindow::on_actionNew_triggered()//新建
{
    QTextDocument *document=ui->plan_textEdit->document();
    if(!document->isModified()){
        ui->plan_textEdit->setPlainText("");
        this->changeTitle("");
        return ;
    }
    int ret=QMessageBox::question(this, "Save?",
                                  "disSave, Save",
                                  QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
    switch(ret)
    {
    case QMessageBox::Cancel:

        break;
    case QMessageBox::Discard:
        ui->plan_textEdit->setPlainText("");
        this->changeTitle("");
        break;
    case QMessageBox::Save:
          if(!on_actionSave_triggered())
                 return ;
          ui->plan_textEdit->setPlainText("");
          this->changeTitle("");
          break;
         }

}

void MainWindow::on_actionOpen_triggered()//打开
{
    QTextDocument *document=ui->plan_textEdit->document();
    if(document->isModified()){
        int ret=QMessageBox::question(this, "Save?",
                                      "disSave, Save",
                                      QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
        if(ret==QMessageBox::Cancel){
            return ;
        }
        else if(ret==QMessageBox::Save){

        }
    }
    //没修改    正常保存    放弃保存
    QString filename=QFileDialog::getOpenFileName(this);
    if(filename.isEmpty())
        return ;
    this->openfile(filename);
    this->changeTitle(filename);
}

bool MainWindow::on_actionSave_As_triggered()//另存为
{
    QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"));
    if(fileName.isEmpty())
        return false;
    this->savefile(fileName);
    this->changeTitle(fileName);
    return true;
}


bool MainWindow::on_actionSave_triggered()//保存
{
    if(this->curFile.isEmpty())
     // qDebug()<<"+++";
            return on_actionSave_As_triggered();

    else
    {
        savefile(this->curFile);
      this->setWindowModified(false);
    }
    return true;
}

void MainWindow::on_actionExit_triggered()//退出
{
    this->close();
}

void MainWindow::on_action_T_triggered()//剪切
{
    this->ui->plan_textEdit->cut();
}

void MainWindow::on_action_C_triggered()//复制
{
    this->ui->plan_textEdit->copy();
}

void MainWindow::on_action_P_triggered()//粘贴
{
    this->ui->plan_textEdit->paste();
}


void MainWindow::on_action_U_triggered()//撤销
{
   this->ui->plan_textEdit->undo();
}

void MainWindow::on_plan_textEdit_textChanged()
{
    //qDebug()<<"niaho";
    this->setWindowModified(true);
}

void MainWindow::on_plan_textEdit_copyAvailable(bool b)
{
    ui->action_T->setEnabled(b);
    ui->action_C->setEnabled(b);

}
//这部分是编码实现的,可以看看与界面设计实现的有什么不一样
void MainWindow::on_action_2_triggered()//查找
{
   QDialog *findDlg=new QDialog(this);
   findDlg->setWindowTitle(tr("Find!"));
   find_textLineEdit=new QLineEdit(findDlg);
   QPushButton *find_Bth=new QPushButton(tr("查找下一个"),findDlg);

   QHBoxLayout *layout=new QHBoxLayout(findDlg);
   layout->addWidget(find_textLineEdit);
   layout->addWidget(find_Bth);

   findDlg->show();

   connect(find_Bth,SIGNAL(clicked()),this,SLOT(show_findText()));
}
void MainWindow::show_findText()
{
    QString findText=find_textLineEdit->text();
    if(!ui->plan_textEdit->find(findText,QTextDocument::FindBackward))
    {
        QMessageBox::warning(this,tr("查找"),tr("找不到 %1").arg(findText));
    }
}

其实还有一部分功能没实现,有兴趣的话可以关注我下一篇文章。

你可能感兴趣的:(QT,Creator)