基于QT的文本编辑器程序源代码.docx
《基于QT的文本编辑器程序源代码.docx》由会员分享,可在线阅读,更多相关《基于QT的文本编辑器程序源代码.docx(26页珍藏版)》请在冰豆网上搜索。
基于QT的文本编辑器程序源代码
文本编辑器代码
textedit.pro
TEMPLATE=app
TARGET=textedit
CONFIG+=qtwarn_on
HEADERS=textedit.h
SOURCES=textedit.cpp\
main.cpp
RESOURCES+=textedit.qrc
build_all:
!
build_pass{
CONFIG-=build_all
CONFIG+=release
}
#install
target.path=$$[QT_INSTALL_DEMOS]/textedit
sources.files=$$SOURCES$$HEADERS$$RESOURCES*.pro*.html*.docimages
sources.path=$$[QT_INSTALL_DEMOS]/textedit
INSTALLS+=targetsources
textedit.h
#ifndefTEXTEDIT_H
#defineTEXTEDIT_H
#include
#include
#include
QT_FORWARD_DECLARE_CLASS(QAction)
QT_FORWARD_DECLARE_CLASS(QComboBox)
QT_FORWARD_DECLARE_CLASS(QFontComboBox)
QT_FORWARD_DECLARE_CLASS(QTextEdit)
QT_FORWARD_DECLARE_CLASS(QTextCharFormat)
QT_FORWARD_DECLARE_CLASS(QMenu)
classTextEdit:
publicQMainWindow
{
Q_OBJECT
public:
TextEdit(QWidget*parent=0);
protected:
virtualvoidcloseEvent(QCloseEvent*e);
private:
voidsetupFileActions();
voidsetupEditActions();
voidsetupTextActions();
boolload(constQString&f);
boolmaybeSave();
voidsetCurrentFileName(constQString&fileName);
privateslots:
voidfileNew();
voidfileOpen();
boolfileSave();
boolfileSaveAs();
voidfilePrint();
voidfilePrintPreview();
voidfilePrintPdf();
voidtextBold();
voidtextUnderline();
voidtextItalic();
voidtextFamily(constQString&f);
voidtextSize(constQString&p);
voidtextStyle(intstyleIndex);
voidtextColor();
voidtextAlign(QAction*a);
voidcurrentCharFormatChanged(constQTextCharFormat&format);
voidcursorPositionChanged();
voidclipboardDataChanged();
voidabout();
voidprintPreview(QPrinter*);
private:
voidmergeFormatOnWordOrSelection(constQTextCharFormat&format);
voidfontChanged(constQFont&f);
voidcolorChanged(constQColor&c);
voidalignmentChanged(Qt:
:
Alignmenta);
QAction*actionSave,
*actionTextBold,
*actionTextUnderline,
*actionTextItalic,
*actionTextColor,
*actionAlignLeft,
*actionAlignCenter,
*actionAlignRight,
*actionAlignJustify,
*actionUndo,
*actionRedo,
*actionCut,
*actionCopy,
*actionPaste;
QComboBox*comboStyle;
QFontComboBox*comboFont;
QComboBox*comboSize;
QToolBar*tb;
QStringfileName;
QTextEdit*textEdit;
};
#endif
main.cpp
#include"textedit.h"
#include
intmain(intargc,char**argv)
{
Q_INIT_RESOURCE(textedit);
QApplicationa(argc,argv);
TextEditmw;
mw.resize(700,800);
mw.show();
returna.exec();
}
textedit.cpp
#include"textedit.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifdefQ_WS_MAC
constQStringrsrcPath=":
/images/mac";
#else
constQStringrsrcPath=":
/images/win";
#endif
TextEdit:
:
TextEdit(QWidget*parent)
:
QMainWindow(parent)
{
this->setWindowTitle(QString("文本编辑器"));
QTextCodec:
:
setCodecForCStrings(QTextCodec:
:
codecForName("UTF-8"));
setupFileActions();
setupEditActions();
setupTextActions();
{
QMenu*helpMenu=newQMenu("帮助",this);
menuBar()->addMenu(helpMenu);
helpMenu->addAction("关于",this,SLOT(about()));
helpMenu->addAction("关于&Qt",qApp,SLOT(aboutQt()));
}
textEdit=newQTextEdit(this);
connect(textEdit,SIGNAL(currentCharFormatChanged(constQTextCharFormat&)),
this,SLOT(currentCharFormatChanged(constQTextCharFormat&)));
connect(textEdit,SIGNAL(cursorPositionChanged()),
this,SLOT(cursorPositionChanged()));
setCentralWidget(textEdit);
textEdit->setFocus();
setCurrentFileName(QString());
fontChanged(textEdit->font());
colorChanged(textEdit->textColor());
alignmentChanged(textEdit->alignment());
connect(textEdit->document(),SIGNAL(modificationChanged(bool)),
actionSave,SLOT(setEnabled(bool)));
connect(textEdit->document(),SIGNAL(modificationChanged(bool)),
this,SLOT(setWindowModified(bool)));
connect(textEdit->document(),SIGNAL(undoAvailable(bool)),
actionUndo,SLOT(setEnabled(bool)));
connect(textEdit->document(),SIGNAL(redoAvailable(bool)),
actionRedo,SLOT(setEnabled(bool)));
setWindowModified(textEdit->document()->isModified());
actionSave->setEnabled(textEdit->document()->isModified());
actionUndo->setEnabled(textEdit->document()->isUndoAvailable());
actionRedo->setEnabled(textEdit->document()->isRedoAvailable());
connect(actionUndo,SIGNAL(triggered()),textEdit,SLOT(undo()));
connect(actionRedo,SIGNAL(triggered()),textEdit,SLOT(redo()));
actionCut->setEnabled(false);
actionCopy->setEnabled(false);
connect(actionCut,SIGNAL(triggered()),textEdit,SLOT(cut()));
connect(actionCopy,SIGNAL(triggered()),textEdit,SLOT(copy()));
connect(actionPaste,SIGNAL(triggered()),textEdit,SLOT(paste()));
connect(textEdit,SIGNAL(copyAvailable(bool)),actionCut,SLOT(setEnabled(bool)));
connect(textEdit,SIGNAL(copyAvailable(bool)),actionCopy,SLOT(setEnabled(bool)));
connect(QApplication:
:
clipboard(),SIGNAL(dataChanged()),this,SLOT(clipboardDataChanged()));
QStringinitialFile="文本编辑器";
constQStringListargs=QCoreApplication:
:
arguments();
if(args.count()==2)
initialFile=args.at
(1);
if(!
load(initialFile))
fileNew();
}
voidTextEdit:
:
closeEvent(QCloseEvent*e)
{
if(maybeSave())
e->accept();
else
e->ignore();
}
voidTextEdit:
:
setupFileActions()
{
QToolBar*tb=newQToolBar(this);
tb->setWindowTitle(tr("FileActions"));
addToolBar(tb);
QMenu*menu=newQMenu("&文件",this);
menuBar()->addMenu(menu);
QAction*a;
a=newQAction(QIcon(rsrcPath+"/filenew.png"),"&新建",this);
a->setShortcut(QKeySequence:
:
New);
connect(a,SIGNAL(triggered()),this,SLOT(fileNew()));
tb->addAction(a);
menu->addAction(a);
a=newQAction(QIcon(rsrcPath+"/fileopen.png"),"&打开",this);
a->setShortcut(QKeySequence:
:
Open);
connect(a,SIGNAL(triggered()),this,SLOT(fileOpen()));
tb->addAction(a);
menu->addAction(a);
menu->addSeparator();
actionSave=a=newQAction(QIcon(rsrcPath+"/filesave.png"),"&保存",this);
a->setShortcut(QKeySequence:
:
Save);
connect(a,SIGNAL(triggered()),this,SLOT(fileSave()));
a->setEnabled(false);
tb->addAction(a);
menu->addAction(a);
a=newQAction("&另存为.",this);
connect(a,SIGNAL(triggered()),this,SLOT(fileSaveAs()));
menu->addAction(a);
menu->addSeparator();
a=newQAction(QIcon(rsrcPath+"/fileprint.png"),"&打印",this);
a->setShortcut(QKeySequence:
:
Print);
connect(a,SIGNAL(triggered()),this,SLOT(filePrint()));
tb->addAction(a);
menu->addAction(a);
a=newQAction(QIcon(rsrcPath+"/fileprint.png"),"&打印预览",this);
connect(a,SIGNAL(triggered()),this,SLOT(filePrintPreview()));
menu->addAction(a);
a=newQAction(QIcon(rsrcPath+"/exportpdf.png"),"&转换为PDF...",this);
a->setShortcut(Qt:
:
CTRL+Qt:
:
Key_D);
connect(a,SIGNAL(triggered()),this,SLOT(filePrintPdf()));
tb->addAction(a);
menu->addAction(a);
menu->addSeparator();
a=newQAction("&退出",this);
a->setShortcut(Qt:
:
CTRL+Qt:
:
Key_Q);
connect(a,SIGNAL(triggered()),this,SLOT(close()));
menu->addAction(a);
}
voidTextEdit:
:
setupEditActions()
{
QToolBar*tb=newQToolBar(this);
tb->setWindowTitle(tr("EditActions"));
addToolBar(tb);
QMenu*menu=newQMenu("&编辑",this);
menuBar()->addMenu(menu);
QAction*a;
a=actionUndo=newQAction(QIcon(rsrcPath+"/editundo.png"),"&撤销",this);
a->setShortcut(QKeySequence:
:
Undo);
tb->addAction(a);
menu->addAction(a);
a=actionRedo=newQAction(QIcon(rsrcPath+"/editredo.png"),"&恢复",this);
a->setShortcut(QKeySequence:
:
Redo);
tb->addAction(a);
menu->addAction(a);
menu->addSeparator();
a=actionCut=newQAction(QIcon(rsrcPath+"/editcut.png"),"&剪切",this);
a->setShortcut(QKeySequence:
:
Cut);
tb->addAction(a);
menu->addAction(a);
a=actionCopy=newQAction(QIcon(rsrcPath+"/editcopy.png"),"&复制",this);
a->setShortcut(QKeySequence:
:
Copy);
tb->addAction(a);
menu->addAction(a);
a=actionPaste=newQAction(QIcon(rsrcPath+"/editpaste.png"),"&粘贴",this);
a->setShortcut(QKeySequence:
:
Paste);
tb->addAction(a);
menu->addAction(a);
actionPaste->setEnabled(!
QApplication:
:
clipboard()->text().isEmpty());
}
voidTextEdit:
:
setupTextActions()
{
QToolBar*tb=newQToolBar(this);
tb->setWindowTitle(tr("FormatActions"));
addToolBar(tb);
QMenu*menu=newQMenu("&格式",this);
menuBar()->addMenu(menu);
actionTextBold=newQAction(QIcon(rsrcPath+"/textbold.png"),"&加粗",this);
actionTextBold->setShortcut(Qt:
:
CTRL+Qt:
:
Key_B);
QFontbold;
bold.setBold(true);
actionTextBold->setFont(bold);
connect(actionTextBold,SIGNAL(triggered()),this,SLOT(textBold()));
tb->addAction(actionTextBold);
menu->addAction(actionTextBold);
actionTextBold->setCheckable(true);
actionTextItalic=newQAction(QIcon(rsrcPath+"/textitalic.png"),"&斜体",this);
actionTextItalic->setShortcut(Qt:
:
CTRL+Qt:
:
Key_I);
QFontitalic;
italic.setItalic(true);
actionTextItalic->setFont(italic);
connect(actionTextItalic,SIGNAL(triggered()),this,SLOT(textItalic()));
tb->addAction(actionTextItalic);
menu->addAction(actionTextItalic);
actionTextItalic->setCheckable(true);
actionTextUnderline=newQAction(QIcon(rsrcPath+"/textunder.png"),"&下划线",this);
actionTextUnderline->setShortcut(Qt:
:
CTRL+Qt:
:
Key_U);
QFontunderline;
underline.setUnderline(true);
actionTextUnderline->setFont(underline);
connect(actionTextUnderline,SIGNAL(triggered()),this,SLOT(textUn