界面效果及所实现功能
所实现功能:
1.新建、打开文件、保存文件、另存为
2.确定是否自动换行
3.字体的格式
全部代码
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QFile; //申明,也可用#include <QFile>
class QTextEdit; //申明,也可用#include <QTextEdit>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void xzk_newslot();
void xzk_openslot();
void xzk_saveslot();
bool xzk_saveAsslot();
void xzk_closeslot();
void xzk_fontslot();
private:
void initMenu();
private:
QFile* _file;
QTextEdit* _text;
QString _curPath;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp:
#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QTextEdit>
#include <QAction>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QFontDialog>
#include <QFont>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
_file = new QFile(this); //用来保存文件
_text =new QTextEdit(this); //用来保存文本
this->setCentralWidget(_text);
initMenu();
}
void MainWindow::initMenu()
{
QMenuBar* menubar =this->menuBar();
/*设置文件IO*/
QMenu* filemenu =menubar->addMenu("文件(&F)");
filemenu->addAction("新建" ,this ,SLOT(xzk_newslot()) ,QKeySequence("Ctrl+N"));
filemenu->addAction("打开" ,this ,SLOT(xzk_openslot()) ,QKeySequence("Ctrl+O"));
filemenu->addAction("保存" ,this ,SLOT(xzk_saveslot()) ,QKeySequence("Ctrl+S"));
filemenu->addAction("另存为" ,this ,SLOT(xzk_saveAsslot()));
filemenu->addAction("关闭" ,this ,SLOT(xzk_closeslot()) ,QKeySequence("Ctrl+Q"));
/*设置换行格式*/
QMenu* stylemenu =menubar->addMenu("是否换行(&s)");
QAction* wrapAction = stylemenu->addAction("换行(w)"
,[&](bool ischecked){
ischecked ? _text->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere)
: _text->setWordWrapMode(QTextOption::NoWrap);});
wrapAction->setCheckable(true);
wrapAction->setChecked(true);
/*设置字体格式*/
QMenu* fontmenu =menubar->addMenu("字体格式(&F)");
fontmenu->addAction("设置" ,this ,SLOT(xzk_fontslot()) ,QKeySequence("Ctrl+F"));
}
void MainWindow::xzk_fontslot()
{
bool ook;
QFont font =QFontDialog::getFont(&ook, this->font(), this, "Font");
if(ook)
this->centralWidget()->setFont(font);
}
void MainWindow::xzk_newslot()
{
if(_text->document()->isModified())
{
int sb=QMessageBox::warning(this, "是否保存", "是否保存"
,QMessageBox::Save, QMessageBox::No, QMessageBox::Cancel);
switch (sb) {
case QMessageBox::Save:
if(_curPath.isEmpty())
{
if(xzk_saveAsslot())
break;
xzk_saveAsslot();
}
else
xzk_saveslot();
break;
case QMessageBox::No:
_text->clear();
_curPath.clear();
break;
default:
break;
}
}
}
void MainWindow::xzk_openslot()
{
QString filename =QFileDialog::getOpenFileName(this, "打开", "", "text(*.txt)");
if(QFileInfo(filename).isFile())
{
_file->setFileName(filename);
_file->open(QIODevice::ReadOnly);
_text->setText(_file->readAll());
_file->close();
}
}
void MainWindow::xzk_saveslot()
{
if(_curPath.isEmpty())
xzk_saveAsslot();
else
{
_file->open(QIODevice::WriteOnly|QIODevice::Truncate);
_file->write(_text->toPlainText().toUtf8());
_file->close();
}
}
bool MainWindow::xzk_saveAsslot()
{
QString filename =QFileDialog::getSaveFileName(this, "另存为", _curPath, "text(*.txt)");
if(QFileInfo(filename).isNativePath())
{
_curPath=filename;
_file->setFileName(filename);
_file->open(QIODevice::WriteOnly|QIODevice::Truncate);
_file->write(_text->toPlainText().toUtf8());
_file->close();
}
return QFileInfo(filename).isNativePath();
}
void MainWindow::xzk_closeslot()
{
this->close();
}
MainWindow::~MainWindow()
{
}
具体实现
1.创建一个菜单栏,把所有Action加上
void MainWindow::initMenu()
{
QMenuBar* menubar =this->menuBar(); //创建菜单栏
/*设置文件IO*/
QMenu* filemenu =menubar->addMenu("文件(&F)");
filemenu->addAction("新建" ,this ,SLOT(xzk_newslot()) ,QKeySequence("Ctrl+N"));
filemenu->addAction("打开" ,this ,SLOT(xzk_openslot()) ,QKeySequence("Ctrl+O"));
filemenu->addAction("保存" ,this ,SLOT(xzk_saveslot()) ,QKeySequence("Ctrl+S"));
filemenu->addAction("另存为" ,this ,SLOT(xzk_saveAsslot()));
filemenu->addAction("关闭" ,this ,SLOT(xzk_closeslot()) ,QKeySequence("Ctrl+Q"));
/*设置换行格式*/
QMenu* stylemenu =menubar->addMenu("是否换行(&s)");
QAction* wrapAction = stylemenu->addAction("换行(w)"
,[&](bool ischecked)
{ ischecked ? _text->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere)
: _text->setWordWrapMode(QTextOption::NoWrap);}); //这里使用了lambada表达式
wrapAction->setCheckable(true);
wrapAction->setChecked(true);
/*设置字体格式*/
QMenu* fontmenu =menubar->addMenu("字体格式(&F)");
fontmenu->addAction("设置" ,this ,SLOT(xzk_fontslot()) ,QKeySequence("Ctrl+F"));
}
2.把准备工作做好
在mainwidow.h加入以下成员变量
private:
QFile* _file; //用来保存文件名
QTextEdit* _text; //用来设置文本格式
QString _curPath; //用来设置保存文件的路径
在mainwindow.cpp中:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
_file = new QFile(this); //用来保存文件
_text =new QTextEdit(this); //用来保存文本
this->setCentralWidget(_text);
initMenu();
}
3.具体功能的实现
新建文件:
void MainWindow::xzk_newslot()
打开文件
void MainWindow::xzk_openslot()
保存文件
void MainWindow::xzk_saveslot()
另存为
bool MainWindow::xzk_saveAsslot()
设置字体格式
bool MainWindow::xzk_saveAsslot()
设置换行格式在initMenu中已经实现
/*设置换行格式*/
QMenu* stylemenu =menubar->addMenu("是否换行(&s)");
QAction* wrapAction = stylemenu->addAction("换行(w)"
,[&](bool ischecked){
ischecked ? _text->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere)
: _text->setWordWrapMode(QTextOption::NoWrap);});
wrapAction->setCheckable(true);
wrapAction->setChecked(true);