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);
}
结果图: