QT:实现一个W P S的界面以及操作,每一步都有图解,一步一步设置和解析

4 篇文章 0 订阅

1代码实现:

1.1.h文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QMainWindow>
#include <QMenuBar>
#include <QAction>
#include <QToolButton>
#include <QToolBar>
#include <QTextEdit>
#include <QFileDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFont>
#include <QFontDialog>
#include <QColorDialog>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void initMenuBar();
    void initToolBar();
private:
    //定义菜单栏指针
    QMenuBar* mainMenuBar;
    QMenu* fileMenu;
    QMenu* editorMenu;

    //定于选项指针
    QAction* openfileAction;
    QAction* savefileAction;
    QAction* closefileAction;

    //定义工具栏指针
    QToolBar* fileBar;
    QToolBar* fontBar;

    //定义工具栏按钮指针:
    QToolButton* fontBtn;
    QToolButton* colorBtn;

    //定义中央文本编辑器
    QTextEdit* mainEdit;
public slots:
    void close_editor();
    void read_file();
    void write_file();
    void char_format();
    void set_color();
};

#endif // MAINWINDOW_H

1.2cpp文件

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //设置窗口大小
    this->setFixedSize(1024, 768);
    //创建一个文本编辑器,设置中央文本编辑器
    this->mainEdit = new QTextEdit(this);
    this->setCentralWidget(mainEdit);

    //初始化菜单栏按键
    initMenuBar();
    //初始化工具栏按键
    initToolBar();

    //1)关闭程序
    connect(closefileAction, &QAction::triggered, this, &MainWindow::close_editor);
    //2)获取文件内容
    connect(openfileAction, &QAction::triggered, this, &MainWindow::read_file);
    //3)将文件内容进行保存
    connect(savefileAction, &QAction::triggered, this, &MainWindow::write_file);
    //4)设置字体大小
    connect(fontBtn, &QToolButton::clicked, this, &MainWindow::char_format);
    //5)设置字体颜色
    connect(colorBtn, &QToolButton::clicked, this, &MainWindow::set_color);
}

MainWindow::~MainWindow()
{
}

void MainWindow::initMenuBar()
{
    mainMenuBar=this->menuBar();
    fileMenu=mainMenuBar->addMenu("文件");
    editorMenu=mainMenuBar->addMenu("编辑");
//    buildMenu=mainMenuBar->addMenu("构建");

    openfileAction=fileMenu->addAction("打开文件");
    openfileAction->setShortcut(QKeySequence("Ctrl+O"));
    openfileAction->setIcon(QIcon(":/new/prefix1/image/New.png"));

    savefileAction=fileMenu->addAction("保存文件");
    savefileAction->setShortcut(QKeySequence("Ctrl+S"));
    savefileAction->setIcon(QIcon(":/new/prefix1/image/save.png"));

    closefileAction=fileMenu->addAction("关闭");
    closefileAction->setShortcut(QKeySequence("Ctrl+X"));
    closefileAction->setIcon(QIcon(":/new/prefix1/image/stop.png"));

}
void MainWindow::initToolBar()
{
    //获取文件工具栏指针
    fileBar = this->addToolBar("fileBar");
    //在文件工具栏放了三个选项对象
    fileBar->addAction(openfileAction);
    fileBar->addAction(savefileAction);
    fileBar->addAction(closefileAction);

    //按钮需要开辟空间
    fontBar = this->addToolBar("fontBar");
    fontBtn = new QToolButton(this);
    fontBtn->setText("字体按钮");
    fontBtn->setIcon(QIcon(":/new/prefix1/image/Edit.png"));

    colorBtn = new QToolButton(this);
    colorBtn->setText("颜色按钮");
    colorBtn->setIcon(QIcon(":/new/prefix1/image/write2file.png"));
    //在工具栏里面放入字体以及着色工具按钮
    fontBar->addWidget(fontBtn);
    fontBar->addWidget(colorBtn);
}

void MainWindow::close_editor()
{
    this->close();
}

void MainWindow::read_file()
{
    //文件过滤器
    QString filter = "所有文件(*.*);;文本文件(*.text);;源文件(*.h *.cpp *.c)";
    //1)获取文件路径
    QString file_dir = QFileDialog::getOpenFileName(this, "读取文件选择路径", "./", filter);
    //判断是否file_dir是否为空,如果为空则直接返回(这种情况就是没有选择路径)
    if (file_dir.isNull()){
        return;
    }

    //2)打开文件并读取文件
    QFile file(file_dir);
    file.open(QIODevice::ReadOnly);
    //为了防止每次打开之前打开的文件还在,所以先清空一下
    mainEdit->clear();
    //将读取到的文件放入主控件之中
    mainEdit->append(file.readAll());
    //file.readAll()这个返回的是一个QByteArray, 它使用隐士共享(写时复制)
    //来减少内存的使用以及不必要的复制
    //而且QByteArray可以直接转换为QString进行转换(但是QString不能)
    //比const char* 要好很高,这个不能直接转QString而且也不写时复制

    //这个文件对象不用了就关闭掉
    file.close();

}

void MainWindow::write_file()
{
    //文件过滤器
    QString filter = "所有文件(*.*);;文本文件(*.text);;源文件(*.h *.cpp *.c)";
    //1获取要保存的路径名
    QString file_dir = QFileDialog::getSaveFileName(this, "请输入要保存的路径名", "./", filter);

    //2.打开文件
    //2.1定义一个文件对象
    QFile file(file_dir);

    //2.2以写的方式打开
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);

    //2.3如果没有打开成功, 直接返回
    if (!file.isOpen()){
        QMessageBox::information(this, "提示", "没有打开成功");
        return;
    }

    //2.4这个从中央编辑器将文字读出,但此时文本是QString类型
    //得将文字转换成QByteArray
    file.write(mainEdit->toPlainText().toUtf8());
    file.close();
}

void MainWindow::char_format()
{
    bool ok;
    //这个是字体那个类

    QFont font = QFontDialog::getFont(&ok, this);
    //如果你没有保存就直接返回
    if (!ok){
        return;
    }

    //文本字体得格式类
    QTextCharFormat fmt;

    //将上面选择得字体进行保存
    fmt.setFont(font);

    //使用fmt对当前的文本格式进行融合
    mainEdit->mergeCurrentCharFormat(fmt);
}

void MainWindow::set_color()
{
    QColor color = QColorDialog::getColor(Qt::red, this, "选择颜色");
    if (!color.isValid()){

        return;
    }

    QTextCharFormat fmt;

    fmt.setForeground(QBrush(color));
    mainEdit->mergeCurrentCharFormat(fmt);
}


2步骤:

2.1先给设置一些基本操作语句:

2.1.1.h文件:
 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenuBar>
#include <QAction>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void initMenuBar();
    void initToolBar();
private:
    QMenuBar* mainMenuBar;
    QMenu* fileMenu;
    QMenu* editorMenu;
    QMenu* buildMenu;

    QAction* openfileAction;
    QAction* savefileAction;
    QAction* closefileAction;

    QAction* copyAction;
};
#endif // MAINWINDOW_H

2.2.2cpp文件:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(1024,768);
    initMenuBar();
}

MainWindow::~MainWindow()
{
}

void MainWindow::initMenuBar()
{
    mainMenuBar=this->menuBar();
    fileMenu=mainMenuBar->addMenu("文件");
    editorMenu=mainMenuBar->addMenu("编辑");
    buildMenu=mainMenuBar->addMenu("构建");

    openfileAction=fileMenu->addAction("打开文件");
    savefileAction=fileMenu->addAction("保存文件");
    closefileAction=fileMenu->addAction("关闭");

    copyAction=editorMenu->addAction("拷贝");
}

void MainWindow::initToolBar()
{

}

结果图:
 

 2.2设置快捷键:

2.2.1cpp文件:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(1024,768);
    initMenuBar();
}

MainWindow::~MainWindow()
{
}

void MainWindow::initMenuBar()
{
    mainMenuBar=this->menuBar();
    fileMenu=mainMenuBar->addMenu("文件");
    editorMenu=mainMenuBar->addMenu("编辑");
    buildMenu=mainMenuBar->addMenu("构建");

    openfileAction=fileMenu->addAction("打开文件");
    openfileAction->setShortcut(QKeySequence("Ctrl+O"));

    savefileAction=fileMenu->addAction("保存文件");
    savefileAction->setShortcut(QKeySequence("Ctrl+S"));

    closefileAction=fileMenu->addAction("关闭");
    closefileAction->setShortcut(QKeySequence("Ctrl+X"));

    copyAction=editorMenu->addAction("拷贝");
    copyAction->setShortcut(QKeySequence("Ctrl+C"));

}

void MainWindow::initToolBar()
{

}

结果图:

 2.3工具栏:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(1024,768);
    initMenuBar();
    initToolBar();
}

MainWindow::~MainWindow()
{
}

void MainWindow::initMenuBar()
{
    mainMenuBar=this->menuBar();
    fileMenu=mainMenuBar->addMenu("文件");
    editorMenu=mainMenuBar->addMenu("编辑");
    buildMenu=mainMenuBar->addMenu("构建");

    openfileAction=fileMenu->addAction("打开文件");
    openfileAction->setShortcut(QKeySequence("Ctrl+O"));

    savefileAction=fileMenu->addAction("保存文件");
    savefileAction->setShortcut(QKeySequence("Ctrl+S"));

    closefileAction=fileMenu->addAction("关闭");
    closefileAction->setShortcut(QKeySequence("Ctrl+X"));

    copyAction=editorMenu->addAction("拷贝");
    copyAction->setShortcut(QKeySequence("Ctrl+C"));

}

void MainWindow::initToolBar()
{
    fileBar=this->addToolBar("fileBar");
    fileBar->addAction(openfileAction);
    fileBar->addAction(savefileAction);
    fileBar->addAction(closefileAction);

    fontBar=this->addToolBar("fontBar");
    fontBtn=new QToolButton(this);
    fontBtn->setText("字体按钮");
    colorBtn=new QToolButton(this);
    colorBtn->setText("颜色按钮");

    fontBar->addWidget(fontBtn);
    fontBar->addWidget(colorBtn);
}

结果图:

 2.4设置图标:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(1024,768);
    initMenuBar();
    initToolBar();
}

MainWindow::~MainWindow()
{
}

void MainWindow::initMenuBar()
{
    mainMenuBar=this->menuBar();
    fileMenu=mainMenuBar->addMenu("文件");
    editorMenu=mainMenuBar->addMenu("编辑");
    buildMenu=mainMenuBar->addMenu("构建");

    openfileAction=fileMenu->addAction("打开文件");
    openfileAction->setShortcut(QKeySequence("Ctrl+O"));
    openfileAction->setIcon(QIcon(":/new/prefix1/tubiao/New.png"));

    savefileAction=fileMenu->addAction("保存文件");
    savefileAction->setShortcut(QKeySequence("Ctrl+S"));
    savefileAction->setIcon(QIcon(":/new/prefix1/tubiao/save.png"));

    closefileAction=fileMenu->addAction("关闭");
    closefileAction->setShortcut(QKeySequence("Ctrl+X"));
    closefileAction->setIcon(QIcon(":/new/prefix1/tubiao/stop.png"));

    copyAction=editorMenu->addAction("拷贝");
    copyAction->setShortcut(QKeySequence("Ctrl+C"));
    copyAction->setIcon(QIcon(":/new/prefix1/tubiao/butterfly1.png"));
}

void MainWindow::initToolBar()
{
    fileBar=this->addToolBar("fileBar");
    fileBar->addAction(openfileAction);
    fileBar->addAction(savefileAction);
    fileBar->addAction(closefileAction);

    fontBar=this->addToolBar("fontBar");
    fontBtn=new QToolButton(this);
    fontBtn->setText("字体按钮");
    fontBtn->setIcon(QIcon(":/new/prefix1/tubiao/Edit.png"));

    colorBtn=new QToolButton(this);
    colorBtn->setText("颜色按钮");
    colorBtn->setIcon(QIcon(":/new/prefix1/tubiao/write2file.png"));

    fontBar->addWidget(fontBtn);
    fontBar->addWidget(colorBtn);
}

结果图:

 2.5设置中央编辑器:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(1024,768);

    this->mainEdit=new QTextEdit(this);
    this->setCentralWidget(mainEdit);

    initMenuBar();
    initToolBar();
}

MainWindow::~MainWindow()
{
}

void MainWindow::initMenuBar()
{
    mainMenuBar=this->menuBar();
    fileMenu=mainMenuBar->addMenu("文件");
    editorMenu=mainMenuBar->addMenu("编辑");
    buildMenu=mainMenuBar->addMenu("构建");

    openfileAction=fileMenu->addAction("打开文件");
    openfileAction->setShortcut(QKeySequence("Ctrl+O"));
    openfileAction->setIcon(QIcon(":/new/prefix1/tubiao/New.png"));

    savefileAction=fileMenu->addAction("保存文件");
    savefileAction->setShortcut(QKeySequence("Ctrl+S"));
    savefileAction->setIcon(QIcon(":/new/prefix1/tubiao/save.png"));

    closefileAction=fileMenu->addAction("关闭");
    closefileAction->setShortcut(QKeySequence("Ctrl+X"));
    closefileAction->setIcon(QIcon(":/new/prefix1/tubiao/stop.png"));

    copyAction=editorMenu->addAction("拷贝");
    copyAction->setShortcut(QKeySequence("Ctrl+C"));
    copyAction->setIcon(QIcon(":/new/prefix1/tubiao/butterfly1.png"));
}

void MainWindow::initToolBar()
{
    fileBar=this->addToolBar("fileBar");
    fileBar->addAction(openfileAction);
    fileBar->addAction(savefileAction);
    fileBar->addAction(closefileAction);

    fontBar=this->addToolBar("fontBar");
    fontBtn=new QToolButton(this);
    fontBtn->setText("字体按钮");
    fontBtn->setIcon(QIcon(":/new/prefix1/tubiao/Edit.png"));

    colorBtn=new QToolButton(this);
    colorBtn->setText("颜色按钮");
    colorBtn->setIcon(QIcon(":/new/prefix1/tubiao/write2file.png"));

    fontBar->addWidget(fontBtn);
    fontBar->addWidget(colorBtn);
}

结果图:

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值