QT编写---------文本编辑器
源代码如下:
main.cpp Source Code:
#include "mymenu.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyMenu w;
w.show();
return a.exec();
}
mymenu.h Source Code:
#ifndef MYMENU_H
#define MYMENU_H
#include <QMainWindow>
#include <QMessageBox>
#include <QtDebug>
#include <QFile>
#include <QFontDialog>
#include <QFont>
#include <QColor>
#include <QColorDialog>
#include <QDateTime>
namespace Ui {
class MyMenu;
}
class MyMenu : public QMainWindow
{
Q_OBJECT
public:
explicit MyMenu(QWidget *parent = 0);
~MyMenu();
private:
Ui::MyMenu *ui;
QString saveFileName;
private slots:
void newFileSlot();
void openFileSlot();//打开一个已存在的文本文件
void saveFileSlot();//保存文本文件
void saveAsFileSlot();//另存为文本文件
void printFileSlot();//打印文件
void ExitSlot();//退出程式
void setFontSlot();//设置字体
void setColorSlot();//设置字体颜色
void currentDateTimeSlot();//获取当前的系统时间,并采用一定格式打印出来
};
#endif // MYMENU_H
mymenu.cpp Source Code:
#include "mymenu.h"
#include "ui_mymenu.h"
#include <QWidget>
#include <QObject>
#include <QFile>
#include <QFileDevice>
#include <QFileDialog>
#include <QDir>
#include <QTextStream>
MyMenu::MyMenu(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyMenu)
{
ui->setupUi(this);
this->setMaximumSize(1301,801);//设置固定窗体最大化
this->setMinimumSize(1301,801);//设置固定窗体最小化
this->setWindowTitle("Untitled ---notepad");//设置窗体名称
//File menu
QObject::connect(ui->action_N_Ctrl_N,SIGNAL(triggered()),this,SLOT(newFileSlot()));//执行新建菜单项
QObject::connect(ui->action_O_Ctrl_O,SIGNAL(triggered()),this,SLOT(openFileSlot()));//执行开打菜单项
QObject::connect(ui->action_S_Ctrl_S_2,SIGNAL(triggered()),this,SLOT(ExitSlot()));//执行退出菜单项
QObject::connect(ui->action_A_Ctrl_A,SIGNAL(triggered()),this,SLOT(saveAsFileSlot()));//执行另存为菜单
QObject::connect(ui->action_S_Ctrl_S,SIGNAL(triggered()),this,SLOT(saveFileSlot()));//执行保存菜单项
//TOOL menu
QObject::connect(ui->action_F,SIGNAL(triggered()),this,SLOT(setFontSlot()));//设置字体
QObject::connect(ui->action_C,SIGNAL(triggered()),this,SLOT(setColorSlot()));//设置颜色
QObject::connect(ui->action_D_F5,SIGNAL(triggered()),this,SLOT(currentDateTimeSlot()));//获取当前时间
//edit menu
QObject::connect(ui->action_U_Ctrl_Z,SIGNAL(triggered()),ui->textEdit,SLOT(undo()));//撤消
QObject::connect(ui->action_T_Ctrl_X,SIGNAL(triggered()),ui->textEdit,SLOT(cut()));//剪切
QObject::connect(ui->action_C_Ctrl_C,SIGNAL(triggered()),ui->textEdit,SLOT(copy()));//复制
QObject::connect(ui->action_P_Ctrl_V,SIGNAL(triggered()),ui->textEdit,SLOT(paste()));//粘贴
QObject::connect(ui->action_L_Ctrl_L,SIGNAL(triggered()),ui->textEdit,SLOT(clear()));//删除
QObject::connect(ui->action_A_Ctrl_A_2,SIGNAL(triggered()),ui->textEdit,SLOT(selectAll()));//全选
}
MyMenu::~MyMenu()
{
delete ui;
}
void MyMenu::newFileSlot()
{
//如果当前文档的内容已经改变了
if(ui->textEdit->document()->isModified())
{
//qDebug()<<"current file modified ";
}
else
{
//qDebug()<<"not modified";
ui->textEdit->clear();
this->setWindowTitle("Untitled.txt -------------huiwensiban");
}
}
void MyMenu::openFileSlot()
{
QString fileName=QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());
//qDebug()<<"fileName is "<<fileName;
if(fileName.isEmpty())//is Null
{
QMessageBox::information(this,"Error Message","Please Select Text File Name");
return;
}
QFile *file=new QFile;
file->setFileName(fileName);
bool ok=file->open(QIODevice::ReadOnly);
if(ok)
{
QTextStream in(file);
ui->textEdit->setText(in.readAll());//read all context from this file text Edit
this->setWindowTitle(fileName);
file->close();
delete file;
}
else
{
QMessageBox::information(this,"Error Message","File Open Error");
}
}
void MyMenu::ExitSlot()
{
this->close();
}
void MyMenu::saveFileSlot()
{
if(saveFileName.isEmpty())
{
this->saveAsFileSlot();
}
else
{
QFile * file=new QFile;
file->setFileName(saveFileName);
bool ok=file->open(QIODevice::WriteOnly);
if(ok)
{
QTextStream out(file);
out<<ui->textEdit->toPlainText();//这里是去除textEdit当中的纯文本信息
file->close();
this->setWindowTitle(saveFileName+"-----------notepad");
delete file;
}
else
{
QMessageBox::information(this,"Error Message","Save File Error");
return;
}
}
}
void MyMenu::saveAsFileSlot()
{
saveFileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
if(saveFileName.isEmpty())
{
QMessageBox::information(this,"Error Message","Please Select A File");
return;
}
QFile * file=new QFile;
file->setFileName(saveFileName);
bool ok=file->open(QIODevice::WriteOnly);
if(ok)
{
QTextStream out(file);
out<<ui->textEdit->toPlainText();//这里是去除textEdit当中的纯文本信息
file->close();
this->setWindowTitle(saveFileName+"-----------notepad");
delete file;
}
else
{
QMessageBox::information(this,"Error Message","Save File Error");
return;
}
}
void MyMenu::printFileSlot()
{
}
void MyMenu::setFontSlot()
{
//get user selected font
bool ok;
QFont font=QFontDialog::getFont(&ok,this);
if(ok)
{
ui->textEdit->setFont(font);
}
else
{
QMessageBox::information(this,"Error Message","Error Set Font!!");
return;
}
}
void MyMenu::setColorSlot()
{
QColor color=QColorDialog::getColor(Qt::green,this);
if(color.isValid())
{
ui->textEdit->setTextColor(color);
}
else
{
QMessageBox::information(this,"Error Message","Error set Color!!");
return;
}
}
void MyMenu::currentDateTimeSlot()
{
QDateTime current=QDateTime::currentDateTime();
QString time=current.toString("yyyy-MM-dd hh:mm:ss");
ui->textEdit->append(time);
}
a>.执行程式原图:
b>.编辑界面:
c>.菜单项位图: