头文件:
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();
}