利用QT開發一個記事本


 

區別於之前創建愛的各個工程,這次我們在這里選擇基類為QMainWindow。

然后默認目錄就是

直接到對應文件中進行代碼的書寫:

main.cpp:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.resize(800,500);
    w.show();

    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>
#include <QMenuBar>
#include <QMenu>
#include <QFileDialog>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    bool isChanged;
    QString fileNameString;//文件名字
    QTextEdit *text1;//這里是一個指針不要忘記了。總是在這個地方出現問題。

    QMenu *fileMenu;//文件下拉菜單

    QAction *newFile;//新建文件。
    QAction *openFile;//打開文件。
    QAction *saveFile;//保存文件。
    QAction *quitFile;//推出。

    QMenu *editMenu;//編輯菜單
    QAction *copyEdit;
    QAction *pasteEdit;
    QAction *cutEdit;
    QAction *allSelectEdit;

    QMenu *helpMenu;//幫助菜單
    QAction *aboutSoftware;
    QAction *howToUse;

private slots:
    void on_new();
    void on_open();
    void on_save();
    void on_quit();

    void on_copy();
    void on_paste();
    void on_cut();
    void on_allSelect();

    void on_howToUse();
    void on_aboutSoftware();
    void on_changed();


};

#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h"
#include <QMessageBox>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    isChanged = false;
    text1 = new QTextEdit;//中央編輯區域的實例化
    this->setCentralWidget(text1);//設置到中央編輯頁面。
    text1->setFontPointSize(16);//修改字體大小。

    //添加文件下拉菜單
    fileMenu = this->menuBar()->addMenu("文件");

    //為下拉菜單添加文件項:
    newFile = new QAction("新建",this);//實例化
    newFile->setShortcut(tr("CTRL+N"));
    fileMenu->addAction(newFile);//添加到顯示
    connect(newFile,SIGNAL(triggered()),this,SLOT(on_new()));//為當前這個文件項添加一個出發事件,當前窗體響應,執行函數為on_new().

    openFile = new QAction("打開",this);//實例化
    openFile->setShortcut(tr("CTRL+O"));
    fileMenu->addAction(openFile);
    connect(openFile,SIGNAL(triggered()),this,SLOT(on_open()));

    saveFile = new QAction("保存",this);
    saveFile->setShortcut(tr("CTRL+S"));
    fileMenu->addAction(saveFile);
    connect(saveFile,SIGNAL(triggered()),this,SLOT(on_save()));

    quitFile = new QAction("退出",this);
    quitFile->setShortcut(tr("CTRL+Q"));
    fileMenu->addAction(quitFile);
    connect(quitFile,SIGNAL(triggered()),this,SLOT(on_quit()));


    editMenu =this->menuBar()->addMenu("編輯");

    copyEdit = new QAction("復制",this);
    copyEdit->setShortcut(tr("CTRL+C"));
    editMenu->addAction(copyEdit);
    connect(copyEdit,SIGNAL(triggered()),this,SLOT(on_copy()));

    pasteEdit = new QAction("粘貼",this);
    pasteEdit->setShortcut(tr("CTRL+V"));
    editMenu->addAction(pasteEdit);
    connect(pasteEdit,SIGNAL(triggered()),this,SLOT(on_paste()));

    cutEdit = new QAction("剪切",this);
    cutEdit->setShortcut(tr("CTRL+X"));
    editMenu->addAction(cutEdit);
    connect(cutEdit,SIGNAL(triggered()),this,SLOT(on_cut()));

    allSelectEdit = new QAction("全選",this);
    allSelectEdit->setShortcut(tr("CTRL+A"));
    editMenu->addAction(allSelectEdit);
    connect(allSelectEdit,SIGNAL(triggered()),this,SLOT(on_allSelect()));

    helpMenu = this->menuBar()->addMenu("幫助");

    aboutSoftware = new QAction("關於軟件",this);
    helpMenu->addAction(aboutSoftware);
    connect(aboutSoftware,SIGNAL(triggered()),this,SLOT(on_aboutSoftware()));

    howToUse = new QAction("如何使用",this);
    helpMenu->addAction(howToUse);
    connect(howToUse,SIGNAL(triggered()),this,SLOT(on_howToUse()));

    connect(text1,SIGNAL(textChanged()),this,SLOT(on_changed()));









}

MainWindow::~MainWindow()
{

}

void MainWindow::on_new()
{
    if(isChanged){
        QMessageBox::information(this,"提示","文件尚未保存");
    }else{
        text1->setText("");//新建的話把,文本內容置空。
    }
}

void MainWindow::on_open()
{
    if(isChanged){
        QMessageBox::information(this,"提示","文件尚未保存");
    }else{
        fileNameString = QFileDialog::getOpenFileName(this,"打開");//當前窗體,打開文件的對話框的標題是:“打開”
        if(fileNameString==NULL){
            return ;
        }
        FILE *pf = fopen(fileNameString.toStdString().data(),"r+");//可讀可寫的方式打開。
        if(pf==NULL)
            return ;
        char buf[1024];
        QString str;
        while(!feof(pf)){
            fgets(buf,sizeof(buf),pf);
            str+=buf;
        }
        text1->setText(str);
        fclose(pf);
    }



}

void MainWindow::on_save()
{
    fileNameString = QFileDialog::getSaveFileName(this,"保存");
    if(fileNameString==NULL)
        return ;
    FILE *pf = fopen(fileNameString.toStdString().data(),"w+");
    if(pf==NULL)
        return ;

    QString str = text1->toPlainText();
    fputs(str.toStdString().data(),pf);
    fclose(pf);
    isChanged = true;

}

void MainWindow::on_quit()
{

    if(isChanged){
        QMessageBox::information(this,"提示","文件尚未保存,點擊右上角×,取消保存");
    }else{
        this->close();
    }
}

void MainWindow::on_copy()
{
    text1->copy();
}

void MainWindow::on_paste()
{
    text1->paste();
}

void MainWindow::on_cut()
{
    text1->cut();
}

void MainWindow::on_allSelect()
{
    text1->selectAll();
}

void MainWindow::on_howToUse()
{
    QMessageBox::information(this,"如何使用","同記事本基本相同");
}

void MainWindow::on_aboutSoftware()
{
    QMessageBox::information(this,"關於軟件","Realized By : Letben");
}

void MainWindow::on_changed()
{
    isChanged = true;
}

 

開發結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM