基本信息
源码名称:多窗口文本工具(qt源码)
源码大小:0.25M
文件格式:.zip
开发语言:C/C++
更新时间:2020-05-12
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 4 元×
微信扫码支付:4 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
实现多窗口文本编辑
#include "subtext.h"
subText::subText(QWidget *parent) : QTextEdit(parent)
{
isEdited = false;
this->filename.clear();
myFile = new QFile(this);
}
void subText::NewFile()
{
static int index = 1;
QString title = QString("未命名文档[%1][*]").arg(index);
this->setWindowTitle(title);
index ;
//处于编辑后,启用*号
connect(this->document(),SIGNAL(contentsChanged()),
this, SLOT(doProcessContentsChanged()));
}
void subText::OpenFile()
{
//获取要打开的文件
QString ofilename = QFileDialog::getOpenFileName(this, "打开文本文件", ".", "TEXT(*.txt *.text *.cpp *.h);;ALL File(*.*)");
if(ofilename.isEmpty())
{
return;
}
//保存文件路径,将文件设置到窗体
this->filename = ofilename;
//从路径中获取文件名
QFileInfo info(filename);
QString title = QString("%1[*]").arg(info.fileName());
this->setWindowTitle(title);
//处于编辑后,启用*号
connect(this->document(),SIGNAL(contentsChanged()),
this, SLOT(doProcessContentsChanged()));
//文件的操作 用流的形式打开文件
myFile->setFileName(filename);
bool ret = myFile->open(QIODevice::ReadOnly|QIODevice::ReadOnly);
if(!ret){
QMessageBox::warning(this, "打开文件", "打开文件失败!");
return;
}
QTextStream stream(myFile);
//QString str = this->codeName;
//QTextCodec::codecForName(str.toLocal8Bit())
stream.setCodec(this->codeName.toLocal8Bit().data());
while(!stream.atEnd()){
QString str = stream.readLine();
this->append(str);
}
myFile->close();
}
void subText::setCodeName(const QString codename)
{
this->codeName = codename;
}
int subText::SaveFile()
{
int ret = -1;
if(!isEdited)
{
return -1;
}
if(this->filename.isEmpty()){
QString savefilename = QFileDialog::getSaveFileName(this,
"保存提示", ".", "Text(*.txt *.text *.cpp *.h)");
if(savefilename.isEmpty()){
return ret;
}
this->filename = savefilename;
}
//对文件进行操作
myFile->setFileName(this->filename);
bool result = myFile->open(QIODevice::WriteOnly|QIODevice::Text);
if(!result){
QMessageBox::warning(this, "失败", "打开文件失败!");
return ret;
}
QTextStream stream(myFile);
//QString str = this->codeName;
//QTextCodec::codecForName(str.toLocal8Bit())
stream.setCodec(this->codeName.toLocal8Bit().data());
stream<<this->toPlainText();
//根据存储的文件名更改窗口名称
QFileInfo info(filename);
QString title = QString("%1[*]").arg(info.fileName());
this->setWindowTitle(title);
//处于编辑后,启用*号
connect(this->document(),SIGNAL(contentsChanged()),
this, SLOT(doProcessContentsChanged()));
stream.flush();
myFile->close();
this->setWindowModified(false);
isEdited =false;
QMessageBox::information(this, "保存提示", "保存文件成功!");
ret = 0;
return ret;
}
void subText::SaveAsFile()
{
bool tepIsEdited = this->isEdited;
this->isEdited = true;
QString tepfilename = this->filename;
this->filename.clear();
int ret = SaveFile();
if(ret < 0){
this->isEdited = tepIsEdited;
this->filename = tepfilename;
}
}
//关闭事件重写
void subText::closeEvent(QCloseEvent *event)
{
if(!isEdited)
{
return;
}
QMessageBox::StandardButton ret;
ret = QMessageBox::information(this, "保存提示", "你确定是否需要保存?",
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Yes);
if(QMessageBox::Yes == ret){
SaveFile();
event->accept();
}
else if(QMessageBox::No == ret){
event->accept();
}
else {
event->ignore();
}
}
void subText::contextMenuEvent(QContextMenuEvent *e)
{
QMenu *myMenu = new QMenu(this);
QAction *undo = myMenu->addAction(QIcon(":/image/undo.png"),
"撤销", this, SLOT(undo()), QKeySequence::Undo);
undo->setEnabled(this->document()->isUndoAvailable());
QAction *redo = myMenu->addAction(QIcon(":/image/redo.png"),
"恢复", this, SLOT(redo()), QKeySequence::Redo);
redo->setEnabled(this->document()->isRedoAvailable());
QAction *copy = myMenu->addAction(QIcon(":/image/copy.png"),
"复制", this, SLOT(copy()), QKeySequence::Copy);
copy->setEnabled(this->textCursor().hasSelection());
QAction *cut = myMenu->addAction(QIcon(":/image/cut.png"),
"剪切", this, SLOT(cut()), QKeySequence::Cut);
cut->setEnabled(this->textCursor().hasSelection());
QAction *paste = myMenu->addAction(QIcon(":/image/paste.png"),
"粘贴", this, SLOT(paste()), QKeySequence::Paste);
paste->setEnabled(this->canPaste());
QAction *clear = myMenu->addAction(QIcon(""),
"清除", this, SLOT(clear()),QKeySequence(tr("Ctrl D")));
clear->setEnabled(!(this->document()->isEmpty()));
QAction *selectall = myMenu->addAction(QIcon(""),
"全选", this, SLOT(selectAll()), QKeySequence::SelectAll);
selectall->setEnabled(!(this->document()->isEmpty()));
myMenu->exec(e->globalPos());
//myMenu->show();
}
////////////slots function///////////
void subText::doProcessContentsChanged(){
isEdited = true;
this->setWindowModified(true);
}
////////////slots end///////////////
实现多窗口文本编辑
#include "subtext.h"
subText::subText(QWidget *parent) : QTextEdit(parent)
{
isEdited = false;
this->filename.clear();
myFile = new QFile(this);
}
void subText::NewFile()
{
static int index = 1;
QString title = QString("未命名文档[%1][*]").arg(index);
this->setWindowTitle(title);
index ;
//处于编辑后,启用*号
connect(this->document(),SIGNAL(contentsChanged()),
this, SLOT(doProcessContentsChanged()));
}
void subText::OpenFile()
{
//获取要打开的文件
QString ofilename = QFileDialog::getOpenFileName(this, "打开文本文件", ".", "TEXT(*.txt *.text *.cpp *.h);;ALL File(*.*)");
if(ofilename.isEmpty())
{
return;
}
//保存文件路径,将文件设置到窗体
this->filename = ofilename;
//从路径中获取文件名
QFileInfo info(filename);
QString title = QString("%1[*]").arg(info.fileName());
this->setWindowTitle(title);
//处于编辑后,启用*号
connect(this->document(),SIGNAL(contentsChanged()),
this, SLOT(doProcessContentsChanged()));
//文件的操作 用流的形式打开文件
myFile->setFileName(filename);
bool ret = myFile->open(QIODevice::ReadOnly|QIODevice::ReadOnly);
if(!ret){
QMessageBox::warning(this, "打开文件", "打开文件失败!");
return;
}
QTextStream stream(myFile);
//QString str = this->codeName;
//QTextCodec::codecForName(str.toLocal8Bit())
stream.setCodec(this->codeName.toLocal8Bit().data());
while(!stream.atEnd()){
QString str = stream.readLine();
this->append(str);
}
myFile->close();
}
void subText::setCodeName(const QString codename)
{
this->codeName = codename;
}
int subText::SaveFile()
{
int ret = -1;
if(!isEdited)
{
return -1;
}
if(this->filename.isEmpty()){
QString savefilename = QFileDialog::getSaveFileName(this,
"保存提示", ".", "Text(*.txt *.text *.cpp *.h)");
if(savefilename.isEmpty()){
return ret;
}
this->filename = savefilename;
}
//对文件进行操作
myFile->setFileName(this->filename);
bool result = myFile->open(QIODevice::WriteOnly|QIODevice::Text);
if(!result){
QMessageBox::warning(this, "失败", "打开文件失败!");
return ret;
}
QTextStream stream(myFile);
//QString str = this->codeName;
//QTextCodec::codecForName(str.toLocal8Bit())
stream.setCodec(this->codeName.toLocal8Bit().data());
stream<<this->toPlainText();
//根据存储的文件名更改窗口名称
QFileInfo info(filename);
QString title = QString("%1[*]").arg(info.fileName());
this->setWindowTitle(title);
//处于编辑后,启用*号
connect(this->document(),SIGNAL(contentsChanged()),
this, SLOT(doProcessContentsChanged()));
stream.flush();
myFile->close();
this->setWindowModified(false);
isEdited =false;
QMessageBox::information(this, "保存提示", "保存文件成功!");
ret = 0;
return ret;
}
void subText::SaveAsFile()
{
bool tepIsEdited = this->isEdited;
this->isEdited = true;
QString tepfilename = this->filename;
this->filename.clear();
int ret = SaveFile();
if(ret < 0){
this->isEdited = tepIsEdited;
this->filename = tepfilename;
}
}
//关闭事件重写
void subText::closeEvent(QCloseEvent *event)
{
if(!isEdited)
{
return;
}
QMessageBox::StandardButton ret;
ret = QMessageBox::information(this, "保存提示", "你确定是否需要保存?",
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Yes);
if(QMessageBox::Yes == ret){
SaveFile();
event->accept();
}
else if(QMessageBox::No == ret){
event->accept();
}
else {
event->ignore();
}
}
void subText::contextMenuEvent(QContextMenuEvent *e)
{
QMenu *myMenu = new QMenu(this);
QAction *undo = myMenu->addAction(QIcon(":/image/undo.png"),
"撤销", this, SLOT(undo()), QKeySequence::Undo);
undo->setEnabled(this->document()->isUndoAvailable());
QAction *redo = myMenu->addAction(QIcon(":/image/redo.png"),
"恢复", this, SLOT(redo()), QKeySequence::Redo);
redo->setEnabled(this->document()->isRedoAvailable());
QAction *copy = myMenu->addAction(QIcon(":/image/copy.png"),
"复制", this, SLOT(copy()), QKeySequence::Copy);
copy->setEnabled(this->textCursor().hasSelection());
QAction *cut = myMenu->addAction(QIcon(":/image/cut.png"),
"剪切", this, SLOT(cut()), QKeySequence::Cut);
cut->setEnabled(this->textCursor().hasSelection());
QAction *paste = myMenu->addAction(QIcon(":/image/paste.png"),
"粘贴", this, SLOT(paste()), QKeySequence::Paste);
paste->setEnabled(this->canPaste());
QAction *clear = myMenu->addAction(QIcon(""),
"清除", this, SLOT(clear()),QKeySequence(tr("Ctrl D")));
clear->setEnabled(!(this->document()->isEmpty()));
QAction *selectall = myMenu->addAction(QIcon(""),
"全选", this, SLOT(selectAll()), QKeySequence::SelectAll);
selectall->setEnabled(!(this->document()->isEmpty()));
myMenu->exec(e->globalPos());
//myMenu->show();
}
////////////slots function///////////
void subText::doProcessContentsChanged(){
isEdited = true;
this->setWindowModified(true);
}
////////////slots end///////////////