Qt制作文本编辑器

Qt制作文本编辑器_第1张图片

 头文件:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#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();
    QLabel* timeLab;
    QTextEdit* edit;

    QAction* newAction;
    QAction* saveAction;
    QAction* openAction;

    void addMenuBar();//添加菜单栏
    void addToolBar();//添加工具栏
    void addStatusBar();//添加状态栏

    void setTime();//设置状态栏时间
    void setFontType(QFont font);//设置字体类型

    void saveFile();//保存文件

    QString deleteStar();//去掉标题中*


private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

源文件:

mainwindow.cpp

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("无标题文档");
    this->resize(800,800);

    addStatusBar();
    addMenuBar();
    addToolBar();




}

void MainWindow::setFontType(QFont font)
{
    this->edit->setFontFamily(font.toString());
}

void MainWindow::saveFile()
{
    //判断当前是否已经打开一个文件(根据窗口的标题是否为文件名称进行判断)
    //提前创建文件对象
    QFile f;
    //当前文本编辑器未打开一个文件
    if(deleteStar()=="无标题文档")
    {
        //弹出保存文件的对话框
        QString saveFileName = QFileDialog::getSaveFileName();
        qDebug()<setWindowTitle(saveFileName);

    }
    //当前文本编辑器已打开一个文件
    else
    {
        f.setFileName(deleteStar());
    }

    //将编辑器中的文本输出到文件中
    //QString data = edit->toPlainText();//获取edit中的文本
    QString data = edit->toHtml();//获取edit中的文本以及文本格式
    if(!f.open(QIODevice::ReadWrite))//读写方式打开文件
    {
        return;
    }
    //文件打开成功
    //控制台输出流对象 <<运算符重载   ""参数      cout<<"fdsf";

    //创建文本输出对象--》文件
    QTextStream stream(&f);
    stream<setText("时间:" + QDateTime::currentDateTime().toString());
}



void MainWindow::addMenuBar()
{
    //菜单栏
    QMenuBar *menuBar = ui->menuBar;

    QMenu* fileMenu = menuBar->addMenu("自定义");
    QMenu* editMenu = menuBar->addMenu("自定义");
    QMenu* helpMenu = menuBar->addMenu("自定义");

    newAction = fileMenu->addAction(QIcon("://editcopy.png"),"自定义");
    openAction = fileMenu->addAction(QIcon("://editredo.png"),"自定义");
    saveAction = fileMenu->addAction(QIcon("://editundo.png"),"自定义");
    fileMenu->addAction(QIcon("://filenew.png"),"自定义");

    editMenu->addAction("自定义");
    editMenu->addAction("自定义");
    editMenu->addAction("自定义");

    helpMenu->addAction("自定义");
    helpMenu->addAction("自定义");

    //保存文件绑定
    connect(saveAction,QAction::triggered,this,MainWindow::saveFile);
    //新建文件绑定
    connect(saveAction,QAction::triggered,[=](){
        //判断单曲是否已经打开一个文件
        //打开了
        if(deleteStar()!="无标题文档")
        {
            //判断当前文件是否还需要保存(通过标题前是否含有*)
            if(this->windowTitle().startsWith("*"))
            {
                //需要保存
                //询问用户是否将未保存内容进行保存
                if(QMessageBox::question(this,"询问","是否将文件保存")==QMessageBox::Yes)
                this->saveFile();
            }
            //不需要保存
            //清空文本编辑器
            edit->clear();
            //标题设置为“无标题文档”
            this->setWindowTitle("无标题文档");
        }
        else
        {
            //判断当前文件是否还需要保存(通过标题前是否含有*)
            if(this->windowTitle().startsWith("*"))
            {
                //需要保存
                this->saveFile();
            }
            //不需要保存
            //清空文本编辑器
            edit->clear();
            //标题设置为“无标题文档”
            this->setWindowTitle("无标题文档");
        }
        //没打开

    });
    //打开文件绑定
    connect(openAction,QAction::triggered,[=](){
        //判断当前文件是否需要保存
        if(this->windowTitle().startsWith("*"))
        {
            if(QMessageBox::question(this,"询问","是否将文件进行保存?")==QMessageBox::Yes)
            {
                this->saveFile();
            }
        }
        //弹出打开文件的对话窗
        QString filePath = QFileDialog::getOpenFileName();
        //创建文件对象
        QFile f(filePath);

        if(f.open(QIODevice::ReadWrite))
        {
            QTextStream stream(&f);
            edit->setText(stream.readAll());
        }
    });
    //文本修改绑定
    connect(edit,QTextEdit::textChanged,[=](){
        if(!windowTitle().startsWith("*"))
        {
            this->setWindowTitle("*"+this->windowTitle());
        }

    });
}

void MainWindow::addToolBar()
{
    //工具栏
    QToolBar* toolBar = ui->mainToolBar;

    toolBar->addAction(newAction);
    toolBar->addAction(openAction);
    toolBar->addAction(saveAction);

    //字体类型
    QLabel* typeLab = new QLabel("字体类型: ");
    QFontComboBox* fontTypeCombo = new QFontComboBox;
    toolBar->addWidget(typeLab);
    toolBar->addWidget(fontTypeCombo);

    toolBar->addSeparator();

    connect(fontTypeCombo,QFontComboBox::currentFontChanged,this,MainWindow::setFontType);

    //字体大小
    QLabel* sizeLab = new QLabel("字体大小: ");
    QComboBox* fontSizeCombo = new QComboBox();
    toolBar->addWidget(sizeLab);
    toolBar->addWidget(fontSizeCombo);

    int i = 1;
    while(i<=30){
        fontSizeCombo->addItem(QString::number(i));
        i++;
    }

    //lambda 表达式  参数:可范围内的局部变量,this
    connect(fontSizeCombo,QComboBox::currentTextChanged,this,[=](QString size){
        edit->setFontPointSize(size.toDouble());
    });

    //加粗
    QPushButton* boldBtn = new QPushButton();
    boldBtn->setIcon(QIcon("://textbold.png"));

    //开启被选中功能
    boldBtn->setCheckable(true);
    toolBar->addWidget(boldBtn);
    //当connect中第三个参数是this;第四个参数是lambda表达式时,this可以省略
    connect(boldBtn,QToolButton::clicked,[=](bool checked){
        if(checked==true){
            edit->setFontWeight(QFont::Bold);
        }
        else{
            edit->setFontWeight(QFont::Normal);
        }
    });

    //斜体
    QToolButton* italicBtn = new QToolButton();
    italicBtn->setIcon(QIcon("://textitalic.png"));

    italicBtn->setCheckable(true);
    toolBar->addWidget(italicBtn);
    connect(italicBtn,QToolButton::clicked,[=](bool checked){
        if(checked==true){
            edit->setFontItalic(true);
        }
        else{
            edit->setFontItalic(false);
        }
    });

    //颜色
    QToolButton* colorBtn = new QToolButton();
    colorBtn->setIcon(QIcon("://true-color.png"));
    toolBar->addWidget(colorBtn);

    connect(colorBtn,QToolButton::clicked,[=](){
        QColor color=QColorDialog::getColor();//弹出选择颜色的标准对话框
        QTextCharFormat format;//设置当前选中文本颜色的属性
        format.setForeground(QBrush(color));
        edit->mergeCurrentCharFormat(format);//将格式对象应用到edit上
    });

    //主题:
    QLabel* topic = new QLabel("主题:");
    QComboBox* fonttopic = new QComboBox();
    toolBar->addWidget(topic);
    toolBar->addWidget(fonttopic);

    int j = 1;
    while(j<=3)
    {
        fonttopic->addItem(QString::number(j));
        j++;
    }
    connect(fonttopic,QComboBox::currentTextChanged,this,[=](QString topictxt)
    {
        QFile f;
        if(topictxt=="1")
            f.setFileName("://white.qss");
        else if(topictxt=="2")
             f.setFileName("://dark.qss");
        else if(topictxt=="3")
             f.setFileName("://black.qss");
        if(f.open(QIODevice::ReadOnly))
            this->setStyleSheet(f.readAll());
    }
    );
}

void MainWindow::addStatusBar()
{
    //状态栏
    //显示动态时间
    QStatusBar* statusBar = ui->statusBar;
    timeLab = new QLabel("时间:" + QDateTime::currentDateTime().toString());
    statusBar->addWidget(timeLab);

    QTimer* timer = new QTimer(this);
    connect(timer,QTimer::timeout,this,MainWindow::setTime);
    timer->start(0.000001);

    //核心控件
    edit = new QTextEdit();
    this->setCentralWidget(edit);
}

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

main.cpp

#include "mainwindow.h"
#include 

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

    return a.exec();
}

你可能感兴趣的:(Qt,qt,c++,开发语言)