基于QT的文本編輯器程序源代碼_第1頁
基于QT的文本編輯器程序源代碼_第2頁
基于QT的文本編輯器程序源代碼_第3頁
基于QT的文本編輯器程序源代碼_第4頁
基于QT的文本編輯器程序源代碼_第5頁
已閱讀5頁,還剩19頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、附錄 文本編輯器代碼 TEMPLATE = appTARGET = texteditCONFIG += qt warn_onHEADERS = textedit.hSOURCES = textedit.cpp main.cppRESOURCES += textedit.qrcbuild_all:!build_pass CONFIG -= build_all CONFIG += release# installtarget.path = $QT_INSTALL_DEMOS/texteditsources.files = $SOURCES $HEADERS $RESOURC

2、ES *.pro *.html *.doc imagessources.path = $QT_INSTALL_DEMOS/texteditINSTALLS += target sources textedit.h#ifndef TEXTEDIT_H#define TEXTEDIT_H#include <QMainWindow>#include <QMap>#include <QPointer>QT_FORWARD_DECLARE_CLASS(QAction)QT_FORWARD_DECLARE_CLASS(QComboBox)QT_FORWARD_DECLA

3、RE_CLASS(QFontComboBox)QT_FORWARD_DECLARE_CLASS(QTextEdit)QT_FORWARD_DECLARE_CLASS(QTextCharFormat)QT_FORWARD_DECLARE_CLASS(QMenu)class TextEdit : public QMainWindow Q_OBJECTpublic: TextEdit(QWidget *parent = 0);protected: virtual void closeEvent(QCloseEvent *e);private: void setupFileActions(); voi

4、d setupEditActions(); void setupTextActions(); bool load(const QString &f); bool maybeSave(); void setCurrentFileName(const QString &fileName);private slots: void fileNew(); void fileOpen(); bool fileSave(); bool fileSaveAs(); void filePrint(); void filePrintPreview(); void filePrintPdf(); v

5、oid textBold(); void textUnderline(); void textItalic(); void textFamily(const QString &f); void textSize(const QString &p); void textStyle(int styleIndex); void textColor(); void textAlign(QAction *a); void currentCharFormatChanged(const QTextCharFormat &format); void cursorPositionChan

6、ged(); void clipboardDataChanged(); void about(); void printPreview(QPrinter *);private: void mergeFormatOnWordOrSelection(const QTextCharFormat &format); void fontChanged(const QFont &f); void colorChanged(const QColor &c); void alignmentChanged(Qt:Alignment a); QAction *actionSave, *ac

7、tionTextBold, *actionTextUnderline, *actionTextItalic, *actionTextColor, *actionAlignLeft, *actionAlignCenter, *actionAlignRight, *actionAlignJustify, *actionUndo, *actionRedo, *actionCut, *actionCopy, *actionPaste; QComboBox *comboStyle; QFontComboBox *comboFont; QComboBox *comboSize; QToolBar *tb;

8、 QString fileName; QTextEdit *textEdit;#endif main.cpp#include "textedit.h"#include <QApplication>int main( int argc, char * argv ) Q_INIT_RESOURCE(textedit); QApplication a( argc, argv ); TextEdit mw; mw.resize( 700, 800 ); mw.show(); return a.exec(); textedit.cpp#include "text

9、edit.h"#include <QAction>#include <QApplication>#include <QClipboard>#include <QColorDialog>#include <QComboBox>#include <QFontComboBox>#include <QFile>#include <QFileDialog>#include <QFileInfo>#include <QFontDatabase>#include <QMen

10、u>#include <QMenuBar>#include <QPrintDialog>#include <QPrinter>#include <QTextCodec>#include <QTextEdit>#include <QToolBar>#include <QTextCursor>#include <QTextList>#include <QtDebug>#include <QCloseEvent>#include <QMessageBox>#inc

11、lude <QPrintPreviewDialog>#include <QTextCodec>#ifdef Q_WS_MACconst QString rsrcPath = ":/images/mac"#elseconst QString rsrcPath = ":/images/win"#endifTextEdit:TextEdit(QWidget *parent) : QMainWindow(parent) this->setWindowTitle(QString("文本編輯器"); QTextCod

12、ec:setCodecForCStrings(QTextCodec:codecForName("UTF-8"); setupFileActions(); setupEditActions(); setupTextActions(); QMenu *helpMenu = new QMenu("幫助", this); menuBar()->addMenu(helpMenu); helpMenu->addAction("關于", this, SLOT(about(); helpMenu->addAction("關

13、于 &Qt", qApp, SLOT(aboutQt(); textEdit = new QTextEdit(this); connect(textEdit, SIGNAL(currentCharFormatChanged(const QTextCharFormat &), this, SLOT(currentCharFormatChanged(const QTextCharFormat &); connect(textEdit, SIGNAL(cursorPositionChanged(), this, SLOT(cursorPositionChanged(

14、); 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

15、); 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); se

16、tWindowModified(textEdit->document()->isModified(); actionSave->setEnabled(textEdit->document()->isModified(); actionUndo->setEnabled(textEdit->document()->isUndoAvailable(); actionRedo->setEnabled(textEdit->document()->isRedoAvailable(); connect(actionUndo, SIGNAL(t

17、riggered(), 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(act

18、ionPaste, 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(clipboardDataChang

19、ed(); QString initialFile = "文本編輯器" const QStringList args = QCoreApplication:arguments(); if (args.count() = 2) initialFile = args.at(1); if (!load(initialFile) fileNew();void TextEdit:closeEvent(QCloseEvent *e) if (maybeSave() e->accept(); else e->ignore();void TextEdit:setupFileAc

20、tions() QToolBar *tb = new QToolBar(this); tb->setWindowTitle(tr("File Actions"); addToolBar(tb); QMenu *menu = new QMenu("&文件", this); menuBar()->addMenu(menu); QAction *a; a = new QAction(QIcon(rsrcPath + "/filenew.png"), "&新建", this); a->se

21、tShortcut(QKeySequence:New); connect(a, SIGNAL(triggered(), this, SLOT(fileNew(); tb->addAction(a); menu->addAction(a); a = new QAction(QIcon(rsrcPath + "/fileopen.png"), "&打開", this); a->setShortcut(QKeySequence:Open); connect(a, SIGNAL(triggered(), this, SLOT(fileO

22、pen(); tb->addAction(a); menu->addAction(a); menu->addSeparator(); actionSave = a = new QAction(QIcon(rsrcPath + "/filesave.png"), "&保存", this); a->setShortcut(QKeySequence:Save); connect(a, SIGNAL(triggered(), this, SLOT(fileSave(); a->setEnabled(false); tb-&g

23、t;addAction(a); menu->addAction(a); a = new QAction("&另存為.", this); connect(a, SIGNAL(triggered(), this, SLOT(fileSaveAs(); menu->addAction(a); menu->addSeparator(); a = new QAction(QIcon(rsrcPath + "/fileprint.png"), "&打印", this); a->setShortcut(QKe

24、ySequence:Print); connect(a, SIGNAL(triggered(), this, SLOT(filePrint(); tb->addAction(a); menu->addAction(a); a = new QAction(QIcon(rsrcPath + "/fileprint.png"), "&打印預覽", this); connect(a, SIGNAL(triggered(), this, SLOT(filePrintPreview(); menu->addAction(a); a = ne

25、w QAction(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 = new QAction("&退出", this);

26、a->setShortcut(Qt:CTRL + Qt:Key_Q); connect(a, SIGNAL(triggered(), this, SLOT(close(); menu->addAction(a);void TextEdit:setupEditActions() QToolBar *tb = new QToolBar(this); tb->setWindowTitle(tr("Edit Actions"); addToolBar(tb); QMenu *menu = new QMenu("&編輯", this);

27、menuBar()->addMenu(menu); QAction *a; a = actionUndo = new QAction(QIcon(rsrcPath + "/editundo.png"),"&撤銷", this); a->setShortcut(QKeySequence:Undo); tb->addAction(a); menu->addAction(a); a = actionRedo = new QAction(QIcon(rsrcPath + "/editredo.png"), &q

28、uot;&恢復", this); a->setShortcut(QKeySequence:Redo); tb->addAction(a); menu->addAction(a); menu->addSeparator(); a = actionCut = new QAction(QIcon(rsrcPath + "/editcut.png"), "&剪切", this); a->setShortcut(QKeySequence:Cut); tb->addAction(a); menu->

29、addAction(a); a = actionCopy = new QAction(QIcon(rsrcPath + "/editcopy.png"), "&復制", this); a->setShortcut(QKeySequence:Copy); tb->addAction(a); menu->addAction(a); a = actionPaste = new QAction(QIcon(rsrcPath + "/editpaste.png"), "&粘貼", this)

30、; a->setShortcut(QKeySequence:Paste); tb->addAction(a); menu->addAction(a); actionPaste->setEnabled(!QApplication:clipboard()->text().isEmpty();void TextEdit:setupTextActions() QToolBar *tb = new QToolBar(this); tb->setWindowTitle(tr("Format Actions"); addToolBar(tb); QMe

31、nu *menu = new QMenu("&格式", this); menuBar()->addMenu(menu); actionTextBold = new QAction(QIcon(rsrcPath + "/textbold.png"), "&加粗", this); actionTextBold->setShortcut(Qt:CTRL + Qt:Key_B); QFont bold; bold.setBold(true); actionTextBold->setFont(bold); co

32、nnect(actionTextBold, SIGNAL(triggered(), this, SLOT(textBold(); tb->addAction(actionTextBold); menu->addAction(actionTextBold); actionTextBold->setCheckable(true); actionTextItalic = new QAction(QIcon(rsrcPath + "/textitalic.png"), "&斜體", this); actionTextItalic->

33、;setShortcut(Qt:CTRL + Qt:Key_I); QFont italic; italic.setItalic(true); actionTextItalic->setFont(italic); connect(actionTextItalic, SIGNAL(triggered(), this, SLOT(textItalic(); tb->addAction(actionTextItalic); menu->addAction(actionTextItalic); actionTextItalic->setCheckable(true); acti

34、onTextUnderline = new QAction(QIcon(rsrcPath + "/textunder.png"), "&下劃線", this); actionTextUnderline->setShortcut(Qt:CTRL + Qt:Key_U); QFont underline; underline.setUnderline(true); actionTextUnderline->setFont(underline); connect(actionTextUnderline, SIGNAL(triggered()

35、, this, SLOT(textUnderline(); tb->addAction(actionTextUnderline); menu->addAction(actionTextUnderline); actionTextUnderline->setCheckable(true); menu->addSeparator(); QActionGroup *grp = new QActionGroup(this); connect(grp, SIGNAL(triggered(QAction *), this, SLOT(textAlign(QAction *); ac

36、tionAlignLeft = new QAction(QIcon(rsrcPath + "/textleft.png"), "&左對齊", grp); actionAlignLeft->setShortcut(Qt:CTRL + Qt:Key_L); actionAlignLeft->setCheckable(true); actionAlignCenter = new QAction(QIcon(rsrcPath + "/textcenter.png"), "&中間對齊", grp)

37、; actionAlignCenter->setShortcut(Qt:CTRL + Qt:Key_E); actionAlignCenter->setCheckable(true); actionAlignRight = new QAction(QIcon(rsrcPath + "/textright.png"), "&右對齊", grp); actionAlignRight->setShortcut(Qt:CTRL + Qt:Key_R); actionAlignRight->setCheckable(true); a

38、ctionAlignJustify = new QAction(QIcon(rsrcPath + "/textjustify.png"), "&整理", grp); actionAlignJustify->setShortcut(Qt:CTRL + Qt:Key_J); actionAlignJustify->setCheckable(true); tb->addActions(grp->actions(); menu->addActions(grp->actions(); menu->addSepara

39、tor(); QPixmap pix(16, 16); pix.fill(Qt:black); actionTextColor = new QAction(pix, "&字體顏色.", this); connect(actionTextColor, SIGNAL(triggered(), this, SLOT(textColor(); tb->addAction(actionTextColor); menu->addAction(actionTextColor); tb = new QToolBar(this); tb->setAllowedAre

40、as(Qt:TopToolBarArea | Qt:BottomToolBarArea); tb->setWindowTitle(tr("Format Actions"); addToolBarBreak(Qt:TopToolBarArea); addToolBar(tb); comboStyle = new QComboBox(tb); tb->addWidget(comboStyle); comboStyle->addItem("Standard"); comboStyle->addItem("Bullet List

41、 (Disc)"); comboStyle->addItem("Bullet List (Circle)"); comboStyle->addItem("Bullet List (Square)"); comboStyle->addItem("Ordered List (Decimal)"); comboStyle->addItem("Ordered List (Alpha lower)"); comboStyle->addItem("Ordered List (A

42、lpha upper)"); connect(comboStyle, SIGNAL(activated(int), this, SLOT(textStyle(int); comboFont = new QFontComboBox(tb); tb->addWidget(comboFont); connect(comboFont, SIGNAL(activated(const QString &), this, SLOT(textFamily(const QString &); comboSize = new QComboBox(tb); comboSize->

43、;setObjectName("comboSize"); tb->addWidget(comboSize); comboSize->setEditable(true); QFontDatabase db; foreach(int size, db.standardSizes() comboSize->addItem(QString:number(size); connect(comboSize, SIGNAL(activated(const QString &), this, SLOT(textSize(const QString &);

44、comboSize->setCurrentIndex(comboSize->findText(QString:number(QApplication:font() .pointSize();bool TextEdit:load(const QString &f) if (!QFile:exists(f) return false; QFile file(f); if (!file.open(QFile:ReadOnly) return false; QByteArray data = file.readAll(); QTextCodec *codec = Qt:codecF

45、orHtml(data); QString str = codec->toUnicode(data); if (Qt:mightBeRichText(str) textEdit->setHtml(str); else str = QString:fromLocal8Bit(data); textEdit->setPlainText(str); setCurrentFileName(f); return true;bool TextEdit:maybeSave() if (!textEdit->document()->isModified() return true

46、; if (fileName.startsWith(QLatin1String(":/") return true; QMessageBox:StandardButton ret; ret = QMessageBox:warning(this, tr("Application"), "文件尚未保存,是否保存?", QMessageBox:Yes | QMessageBox:No | QMessageBox:Cancel); if (ret = QMessageBox:Yes) return fileSave(); else if (r

47、et = QMessageBox:Cancel) return false; return true;void TextEdit:setCurrentFileName(const QString &fileName) this->fileName = fileName; textEdit->document()->setModified(false); QString shownName; if (fileName.isEmpty() shownName = "我的文本編輯器" else shownName = QFileInfo(fileName

48、).fileName(); setWindowTitle(tr("%1*").arg(shownName); setWindowModified(false);void TextEdit:fileNew() if (maybeSave() textEdit->clear(); setCurrentFileName(QString(); void TextEdit:fileOpen() QString fn = QFileDialog:getOpenFileName(this, tr("Open File."), QString(), tr(&quo

49、t;TXT-Files (*.txt);All Files (*)"); if (!fn.isEmpty() load(fn);bool TextEdit:fileSave() if (fileName.isEmpty() return fileSaveAs(); QFile file(fileName); if (!file.open(QFile:WriteOnly) return false; QTextStream ts(&file); ts.setCodec(QTextCodec:codecForName("UTF-8"); ts <<

50、 textEdit->document()->toHtml("UTF-8"); textEdit->document()->setModified(false); return true;bool TextEdit:fileSaveAs() QString fn = QFileDialog:getSaveFileName(this, tr("Save as."), QString(), tr("TXT-Files (*.txt);All Files (*)"); if (fn.isEmpty() return

51、false; setCurrentFileName(fn); return fileSave();void TextEdit:filePrint()#ifndef QT_NO_PRINTER QPrinter printer(QPrinter:HighResolution); QPrintDialog *dlg = new QPrintDialog(&printer, this); if (textEdit->textCursor().hasSelection() dlg->addEnabledOption(QAbstractPrintDialog:PrintSelecti

52、on); dlg->setWindowTitle(tr("Print Document"); if (dlg->exec() = QDialog:Accepted) textEdit->print(&printer); delete dlg;#endifvoid TextEdit:filePrintPreview()#ifndef QT_NO_PRINTER QPrinter printer(QPrinter:HighResolution); QPrintPreviewDialog preview(&printer, this); conn

53、ect(&preview, SIGNAL(paintRequested(QPrinter *), SLOT(printPreview(QPrinter *); preview.exec();#endifvoid TextEdit:printPreview(QPrinter *printer)#ifdef QT_NO_PRINTER Q_UNUSED(printer);#else textEdit->print(printer);#endifvoid TextEdit:filePrintPdf()#ifndef QT_NO_PRINTER/! 0 QString fileName = QFileDialog:getSaveFileName(this, " 轉換為 PDF", QString(), "*.pdf"); if (!fileName.isEmpty() if (QFileInfo(fileName).suffix().i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論