QT5与C++实现一个简单的文本编辑器

1、功能

这个程序又添加了文本编辑功能,什么加粗,斜体,下划线,字体设置,字号设置,文字排版,段落对齐功能。

2、代码全展示

头文件

showwidget.h

[cpp]  view plain  copy
  1. /** 
  2. * 书本:【Qt5开发及实例】 
  3. * 功能:实现一个简单的文本编辑器 
  4. * 文件:showwidget.h 
  5. * 时间:2015年1月18日10:03:21 
  6. * 作者:cutter_point 
  7. */  
  8. #ifndef SHOWWIDGET_H  
  9. #define SHOWWIDGET_H  
  10.   
  11. #include   
  12. #include   
  13. #include   
  14. #include   
  15.   
  16. class ShowWidget : public QWidget  
  17. {  
  18.   Q_OBJECT  
  19. public:  
  20.   explicit ShowWidget(QWidget *parent = 0);  
  21.   QImage img;  
  22.   QLabel *imageLabel;  
  23.   QTextEdit *text;  
  24.   
  25. signals:  
  26.   
  27. public slots:  
  28. };  
  29.   
  30. #endif // SHOWWIDGET_H  


imageprocessor.h

[cpp]  view plain  copy
  1. /** 
  2. * 书本:【Qt5开发及实例】 
  3. * 功能:实现一个简单的文本编辑器 
  4. * 文件:showwidget.h 
  5. * 时间:2015年1月18日10:41:52 
  6. * 作者:cutter_point 
  7. */  
  8. #ifndef IMAGEPROCESSOR_H  
  9. #define IMAGEPROCESSOR_H  
  10.   
  11. #include   
  12. #include   
  13. #include   
  14. #include   
  15. #include   
  16. #include   
  17. #include   
  18. #include   
  19. #include   
  20. #include   
  21. #include   
  22. #include   
  23.   
  24. #include "showwidget.h"  
  25.   
  26. class ImageProcessor : public QMainWindow  
  27. {  
  28.   Q_OBJECT  
  29.   
  30. public:  
  31.   ImageProcessor(QWidget *parent = 0);  
  32.   ~ImageProcessor();  
  33.   
  34.   //创建动作  
  35.   void createActions();  
  36.   //创建菜单  
  37.   void createMenus();  
  38.   //创建工具栏  
  39.   void createToolBars();  
  40.   
  41.   void loadFile(QString filename);    //加载文件  
  42.   void mergeFormat(QTextCharFormat);    //文本格式  
  43.   
  44. private:  
  45.   //文字排版功能  
  46.   QLabel *listLabel;    //标签,“排序”  
  47.   QComboBox *listComboBox;    //各种不同的排序,下拉框  
  48.   QActionGroup *actGrp;   //一个action组  
  49.   QAction *leftAction;    //左对齐  
  50.   QAction *rightAction;   //右对齐  
  51.   QAction *centerAction;    //居中对齐  
  52.   QAction *justifyAction;     //两端对齐  
  53.   QToolBar *listToolBar;    //存放排序工具的工具栏  
  54.   
  55.   //文字工具栏,实现对文字的编辑功能  
  56.   QLabel *fontLabel1;   //标签,字体  
  57.   QFontComboBox *fontComboBox;    //字体的选择下拉  
  58.   QLabel *fontLabel2;   //字号  
  59.   QComboBox *sizeComboBox;    //字号下拉  
  60.   QToolButton *boldBtn;   //加粗  
  61.   QToolButton *italicBtn;   //斜体  
  62.   QToolButton *underlineBtn;    //下划线  
  63.   QToolButton *colorBtn;    //字体颜色选择  
  64.   
  65.   //添加一个存放这些字体处理工具的工具栏  
  66.   QToolBar *fontToolBar;  
  67.   
  68.   //各项菜单栏  
  69.   QMenu *fileMenu;  
  70.   QMenu *zoomMenu;  
  71.   QMenu *rotateMenu;  
  72.   QMenu *mirrorMenu;  
  73.   
  74.   QImage img;   //图片  
  75.   QString fileName;     //文件名  
  76.   ShowWidget *showWidget;     //显示流  
  77.   
  78.   //文件菜单项  
  79.   QAction *openFileAction;  
  80.   QAction *NewFileAction;  
  81.   QAction *PrintTextAction;  
  82.   QAction *PrintImageAction;  
  83.   QAction *exitAction;  
  84.   
  85.   //编辑菜单项  
  86.   QAction *copyAction;  
  87.   QAction *cutAction;  
  88.   QAction *pasteAction;  
  89.   QAction *aboutAction;  
  90.   QAction *zoomInAction;  
  91.   QAction *zoomOutAction;  
  92.   
  93.   //旋转菜单项  
  94.   QAction *rotate90Action;  
  95.   QAction *rotate180Action;  
  96.   QAction *rotate270Action;  
  97.   
  98.   //镜像菜单项  
  99.   QAction *mirrorVerticalAction;  
  100.   QAction *mirrorHorizontalAction;  
  101.   
  102.   
  103.   QAction *undoAction;  
  104.   QAction *redoAction;  
  105.   
  106.   //工具栏  
  107.   QToolBar *fileTool;  
  108.   QToolBar *zoomTool;  
  109.   QToolBar *rotateTool;  
  110.   QToolBar *mirrorTool;  
  111.   QToolBar *doToolBar;  
  112.   
  113.   
  114. protected slots:    //添加函数槽  
  115.   void ShowList(int);   //显示排序列表  
  116.   void ShowAlignment(QAction *act);   //展示不同的排序结果  
  117.   void ShowCursorPositionChanged();   //光标位置改变???  
  118.   
  119.    //-------------------------------------------------------------------------------  
  120.   void ShowNewFile();   //新建一个新的文件  
  121.   void ShowOpenFile();    //打开文件  
  122.   void ShowPrintText();   //打印功能的实现  
  123.   void ShowPrintImage();    //打印图片  
  124.   void ShowZoomIn();    //关于图片的缩放功能  
  125.   void ShowZoomOut();   //图片缩小  
  126.   void ShowRotate90();    //旋转90度  
  127.   void ShowRotate180();   //180度  
  128.   void ShowRotate270();   //270度  
  129.   void ShowMirrorVertical();    //水平镜像  
  130.   void ShowMirrorHorizontal();    //垂直镜像  
  131.   //-------------------------------------------------------------------------------  
  132.   //添加文字处理的相应槽函数  
  133.   void ShowFontComboBox(QString comboStr);    //显示字体的改变  
  134.   void ShowSizeSpinBox(QString spinValue);    //字号的改变  
  135.   void ShowBoldBtn();   //加粗  
  136.   void ShowItalicBtn();   //斜体  
  137.   void ShowUnderlineBtn();      //下划线  
  138.   void ShowColorBtn();      //颜色的改变  
  139.   void ShowCurrentFormatChanged(const QTextCharFormat &fmt);    //设置字符格式  
  140.   //当光标所在的字符格式改变的时候,调用这个函数,这个函数根据新的格式将工具栏上的控件显示更新  
  141.   
  142. };  
  143.   
  144. #endif // IMAGEPROCESSOR_H  

源文件

showwidget.cpp

[cpp]  view plain  copy
  1. /** 
  2. * 书本:【Qt5开发及实例】 
  3. * 功能:实现一个简单的文本编辑器 
  4. * 文件:showwidget.h 
  5. * 时间:2015年1月18日10:03:21 
  6. * 作者:cutter_point 
  7. */  
  8. #include "showwidget.h"  
  9.   
  10. #include   
  11.   
  12. ShowWidget::ShowWidget(QWidget *parent) :  
  13.   QWidget(parent)  
  14. {  
  15.   imageLabel = new QLabel;  
  16.   imageLabel->setScaledContents(true);  
  17.   
  18.   text = new QTextEdit;  
  19.   
  20.   QHBoxLayout *mainLayout = new QHBoxLayout(this);  
  21.   mainLayout->addWidget(imageLabel);  
  22.   mainLayout->addWidget(text);  
  23. }  

imageprocessor.cpp

[cpp]  view plain  copy
  1. /** 
  2. * 书本:【Qt5开发及实例】 
  3. * 功能:实现一个简单的文本编辑器 
  4. * 文件:showwidget.h 
  5. * 时间:2015年1月18日10:41:52 
  6. * 作者:cutter_point 
  7. */  
  8. #include "imageprocessor.h"  
  9.   
  10. #include   
  11. #include   
  12. #include   
  13. #include   
  14. #include   
  15. //#include   
  16. #include   
  17. #include   
  18. #include   
  19. #include   
  20. #include   
  21. #include   
  22.   
  23. ImageProcessor::ImageProcessor(QWidget *parent)  
  24.   : QMainWindow(parent)  
  25. {  
  26.   //首先设定标题  
  27.   setWindowTitle(tr("my word"));  
  28.   
  29.   //创建放图像的label和文本输入的地方,把这个设置为中心部件  
  30.   showWidget = new ShowWidget(this);    //创建一个对象  
  31.   setCentralWidget(showWidget);   //把这个设置为中心部件  
  32.   
  33.   //排序下拉框的初始化  
  34.   listLabel = new QLabel(tr("paixu:"));   //排序  
  35.   listComboBox = new QComboBox;  
  36.   listComboBox->addItem("Standard");      //标准  
  37.   listComboBox->addItem("QTextListFormat::ListDisc");  
  38.   listComboBox->addItem("QTextListFormat::ListCircle");  
  39.   listComboBox->addItem("QTextListFormat::ListSquare");  
  40.   listComboBox->addItem("QTextListFormat::ListDecimal");  
  41.   listComboBox->addItem("QTextListFormat::ListLowerAlpha");  
  42.   listComboBox->addItem("QTextListFormat::ListUpperAlpha");  
  43.   listComboBox->addItem("QTextListFormat::ListLowerRoman");  
  44.   listComboBox->addItem("QTextListFormat::ListUpperRoman");  
  45.   
  46.   //事件的关联  
  47.   connect(listComboBox, SIGNAL(activated(int)), this, SLOT(ShowList(int)));   //选择的下拉排序的第几个,然后在相应的显示  
  48.   
  49.   
  50. //  qDebug()<<"11111111111111";  
  51.   //创建有关字体的部件  
  52.   //在工具栏上嵌入控件  
  53.   //设置字体  
  54.   fontLabel1 = new QLabel(tr("font:"));   //字体标签  
  55.   fontComboBox = new QFontComboBox;   //字体选项下拉  
  56.   fontComboBox->setFontFilters(QFontComboBox::ScalableFonts);   //显示所有的可缩放的字体  
  57.   
  58.   //字号  
  59.   fontLabel2 = new QLabel(tr("size:"));   //字号  
  60.   sizeComboBox = new QComboBox;  
  61.   QFontDatabase db;   //实现在字号下拉列表框中填充各种不同的字号条目,这个类用于表示当前系统中所有可用的格式信息  
  62.   foreach(int size, db.standardSizes())   //第二个参数返回可用标准字号的列表  
  63.     {  
  64.       sizeComboBox->addItem(QString::number(size)); //QString::number(int size, int base)第二个参数表示这个返回base进制的数  
  65.     }  
  66.   
  67.   //粗体  
  68.   boldBtn = new QToolButton;  
  69.   boldBtn->setIcon(QIcon(":/bold.png"));  
  70.   boldBtn->setCheckable(true);    //默认选择  
  71.   
  72.   //斜体  
  73.   italicBtn = new QToolButton;  
  74.   italicBtn->setIcon(QIcon(":/italic.png"));  
  75.   italicBtn->setCheckable(true);  
  76.   
  77.   //下划线  
  78.   underlineBtn = new QToolButton;  
  79.   underlineBtn->setIcon(QIcon(":/underline.png"));  
  80.   underlineBtn->setCheckable(true);  
  81.   
  82.   //颜色  
  83.   colorBtn = new QToolButton;  
  84.   colorBtn->setIcon(QIcon(":/color.png"));  
  85.   colorBtn->setCheckable(true);  
  86.   
  87.   
  88.   createActions();      //创建动作  
  89. //  qDebug()<<"222222222222222222";  
  90.   createMenus();    //创建菜单    
  91. //  qDebug()<<"3333333333333333";  
  92.   createToolBars();   //工具  
  93.   
  94. //  qDebug()<<"......";  
  95.   //相应的槽函数的连接  
  96.   connect(fontComboBox, SIGNAL(activated(QString)), this, SLOT(ShowFontComboBox(QString)));  
  97.   connect(sizeComboBox, SIGNAL(activated(QString)), this, SLOT(ShowSizeSpinBox(QString)));  
  98.   connect(boldBtn, SIGNAL(clicked()), this, SLOT(ShowBoldBtn()));  
  99.   connect(italicBtn, SIGNAL(clicked()), this, SLOT(ShowItalicBtn()));  
  100.   connect(underlineBtn, SIGNAL(clicked()), this, SLOT(ShowUnderlineBtn()));  
  101.   connect(colorBtn, SIGNAL(clicked()), this, SLOT(ShowColorBtn()));  
  102.   connect(showWidget->text, SIGNAL(currentCharFormatChanged(QTextCharFormat)), this, SLOT(ShowCurrentFormatChanged(QTextCharFormat&)));  
  103.   
  104.   connect(showWidget->text->document(), SIGNAL(undoAvailable(bool)), redoAction, SLOT(setEnabled(bool)));  
  105.   connect(showWidget->text->document(), SIGNAL(redoAvailable(bool)), redoAction, SLOT(setEnabled(bool)));  
  106.   connect(showWidget->text, SIGNAL(cursorPositionChanged()), this, SLOT(ShowCursorPositionChanged()));  
  107.   
  108.   //如果图像加载成功  
  109.   if(img.load(":/image.png"))  
  110.     {  
  111.       //在imageLabel中放图像  
  112.       showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));  
  113.     }  
  114.   
  115. }  
  116.   
  117. //实现文本的排序  
  118. void ImageProcessor::ShowList(int index)  
  119. {  
  120.   QTextCursor cursor = showWidget->text->textCursor();  
  121.   
  122.   if(index != 0)  
  123.     {  
  124.       QTextListFormat::Style style = QTextListFormat::ListDisc;   //默认排序是这个  
  125.   
  126.       switch(index)  
  127.         {  
  128.         default:  
  129.         case 1:  
  130.           style = QTextListFormat::ListDisc; break;  
  131.         case 2:  
  132.           style = QTextListFormat::ListCircle; break;  
  133.         case 3:  
  134.           style = QTextListFormat::ListSquare; break;  
  135.         case 4:  
  136.           style = QTextListFormat::ListDecimal; break;  
  137.         case 5:  
  138.           style = QTextListFormat::ListLowerAlpha; break;  
  139.         case 6:  
  140.           style = QTextListFormat::ListUpperAlpha; break;  
  141.         case 7:  
  142.           style = QTextListFormat::ListLowerRoman; break;  
  143.         case 8:  
  144.           style = QTextListFormat::ListUpperRoman; break;  
  145.         }  
  146.   
  147.       cursor.beginEditBlock();    //开始设置缩进值  
  148.       //这个显示格式化的信息  
  149.       QTextBlockFormat blockFmt = cursor.blockFormat();   //后面这个返回光标选定的段落格式  
  150.       QTextListFormat listFmt;  
  151.   
  152.       if(cursor.currentList())    //判断当前是否有选中格式  
  153.         {  
  154.           listFmt = cursor.currentList()->format();   //设定格式  
  155.         }  
  156.       else  
  157.         {  
  158.           listFmt.setIndent(blockFmt.indent() + 1);   //设定缩进值  
  159.           blockFmt.setIndent(0);    //设定段落缩进为0  
  160.           cursor.setBlockFormat(blockFmt);      //设定实现  
  161.         }  
  162.       listFmt.setStyle(style);    //设定格式  
  163.       cursor.endEditBlock();    //结束设置  
  164.     }  
  165.   else  
  166.     {  
  167.       QTextBlockFormat bfmt;  
  168.       bfmt.setObjectIndex(-1);  
  169.       cursor.mergeBlockFormat(bfmt);  
  170.     }  
  171.   
  172. }  
  173.   
  174. //实现段落的对齐  
  175. void ImageProcessor::ShowAlignment(QAction *act)  
  176. {  
  177.   if(act == leftAction)  
  178.     showWidget->text->setAlignment(Qt::AlignLeft);    //接受到相应的信号应用到文本上  
  179.   if(act == rightAction)  
  180.     showWidget->text->setAlignment(Qt::AlignRight);  
  181.   if(act == centerAction)  
  182.     showWidget->text->setAlignment(Qt::AlignCenter);  
  183.   if(act == justifyAction)  
  184.     showWidget->text->setAlignment(Qt::AlignJustify);  
  185. }  
  186.   
  187. //把对应的状态显示在工具栏上  
  188. void ImageProcessor::ShowCursorPositionChanged()  
  189. {  
  190.   if(showWidget->text->alignment() == Qt::AlignLeft)  
  191.     leftAction->setChecked(true);   //改变为选中状态  
  192.   if(showWidget->text->alignment() == Qt::AlignRight)  
  193.     rightAction->setChecked(true);  
  194.   if(showWidget->text->alignment() == Qt::AlignCenter)  
  195.     centerAction->setChecked(true);  
  196.   if(showWidget->text->alignment() == Qt::AlignJustify)  
  197.     justifyAction->setChecked(true);  
  198. }  
  199.   
  200. //工具栏的实现  
  201. void ImageProcessor::createToolBars()  
  202. {  
  203.   //排序工具条  
  204.   listToolBar = addToolBar("list");  
  205.   listToolBar->addWidget(listLabel);  
  206.   listToolBar->addWidget(listComboBox);  
  207.   listToolBar->addSeparator();  
  208.   listToolBar->addActions(actGrp->actions());   //把整个组都添加进去  
  209.   
  210.   //文件工具条  
  211.   fileTool = addToolBar("File");  
  212.   fileTool->addAction(openFileAction);  
  213.   fileTool->addAction(NewFileAction);  
  214.   fileTool->addAction(PrintTextAction);  
  215.   fileTool->addAction(PrintImageAction);  
  216.   
  217.   //编辑工具条  
  218.   zoomTool = addToolBar("Edit");  
  219.   zoomTool->addAction(copyAction);  
  220.   zoomTool->addAction(cutAction);  
  221.   zoomTool->addAction(pasteAction);  
  222. //  zoomTool->addAction(aboutAction);  
  223.   zoomTool->addSeparator(); //分隔符  
  224.   zoomTool->addAction(zoomInAction);  
  225.   zoomTool->addAction(zoomOutAction);  
  226.   
  227.   //旋转工具  
  228.   rotateTool = addToolBar("rotate");  
  229.   rotateTool->addAction(rotate90Action);  
  230.   rotateTool->addAction(rotate180Action);  
  231.   rotateTool->addAction(rotate270Action);  
  232.   
  233.   //撤销和重做  
  234.   doToolBar = addToolBar("doEdit");  
  235.   doToolBar->addAction(undoAction);  
  236.   doToolBar->addAction(redoAction);  
  237.   
  238.   //文字的工具栏  
  239.   fontToolBar = addToolBar("Font");  
  240.   fontToolBar->addWidget(fontLabel1);   //字体  
  241.   fontToolBar->addWidget(fontComboBox);     //字体下拉框  
  242.   fontToolBar->addWidget(fontLabel2);   //字号  
  243.   fontToolBar->addWidget(sizeComboBox);   //字号下拉  
  244.   fontToolBar->addSeparator();    //分割线  
  245.   fontToolBar->addWidget(boldBtn);    //加粗  
  246.   fontToolBar->addWidget(italicBtn);    //斜  
  247.   fontToolBar->addWidget(underlineBtn);   //下划线  
  248.   fontToolBar->addSeparator();  
  249.   fontToolBar->addWidget(colorBtn);   //颜色  
  250.   
  251.   fileTool->setAllowedAreas(Qt::TopToolBarArea|Qt::LeftToolBarArea);  
  252. }  
  253.   
  254. //设置字符格式  
  255. //当光标所在的字符格式改变的时候,调用这个函数,这个函数根据新的格式将工具栏上的控件显示更新  
  256. void ImageProcessor::ShowCurrentFormatChanged(const QTextCharFormat &fmt)  
  257. {  
  258.   fontComboBox->setCurrentIndex(fontComboBox->findText(fmt.fontFamily()));  
  259.   sizeComboBox->setCurrentIndex(sizeComboBox->findText(QString::number(fmt.fontPointSize())));  
  260.   boldBtn->setChecked(fmt.font().bold());  
  261.   italicBtn->setChecked(fmt.fontItalic());  
  262.   underlineBtn->setChecked(fmt.fontUnderline());  
  263. }  
  264.   
  265. //设置颜色  
  266. void ImageProcessor::ShowColorBtn()  
  267. {  
  268.   QColor color = QColorDialog::getColor(Qt::red, this);   //第一个参数指定默认选择的颜色,第二个定义了标准对话框的父窗口  
  269.   
  270.   if(color.isValid())  
  271.     {  
  272.       QTextCharFormat fmt;  
  273.       fmt.setForeground(color);   //设置颜色  
  274.       showWidget->text->mergeCurrentCharFormat(fmt);  
  275.     }  
  276. }  
  277.   
  278. //下划线  
  279. void ImageProcessor::ShowUnderlineBtn()  
  280. {  
  281.   QTextCharFormat fmt;  
  282.   fmt.setFontUnderline(underlineBtn->isChecked());  
  283.   showWidget->text->mergeCurrentCharFormat(fmt);  
  284. }  
  285.   
  286. //设置字体倾斜  
  287. void ImageProcessor::ShowItalicBtn()  
  288. {  
  289.   QTextCharFormat fmt;  
  290.   fmt.setFontItalic(italicBtn->isChecked());  
  291.   showWidget->text->mergeCurrentCharFormat(fmt);  
  292. }  
  293.   
  294. //设置文字加粗  
  295. void ImageProcessor::ShowBoldBtn()  
  296. {  
  297.   QTextCharFormat fmt;  
  298.   fmt.setFontWeight(boldBtn->isChecked()?QFont::Bold:QFont::Normal);  
  299.   showWidget->text->mergeCurrentCharFormat(fmt);    //应用进去  
  300. }  
  301.   
  302. //设置字号  
  303. void ImageProcessor::ShowSizeSpinBox(QString spinValue)  
  304. {  
  305.   QTextCharFormat fmt; //文体字符格式  
  306.   fmt.setFontPointSize(spinValue.toFloat());    //设置字体大小  
  307.   showWidget->text->mergeCurrentCharFormat(fmt);//将新的格式应用到光标选区内的字符  
  308. }  
  309.   
  310. //设置字体  
  311. void ImageProcessor::ShowFontComboBox(QString comboStr)  
  312. {  
  313.   QTextCharFormat fmt;    //文体字符格式  
  314.   fmt.setFontFamily(comboStr);    //选择的字体名称设置给QTextCharFormat  
  315.   mergeFormat(fmt);   //将新的格式应用到光标选区内的字符  
  316. }  
  317.   
  318. //通过QTextCursor来对QTextDocument进行修改  
  319. void ImageProcessor::mergeFormat(QTextCharFormat format)  
  320. {  
  321.   QTextCursor cursor = showWidget->text->textCursor();    //得到这个类  
  322.   if(!cursor.hasSelection())    //若光标没有高亮选区,则把光标所在的词作为选区,以空格或“,”或“。”等标点符号分割  
  323.     cursor.select(QTextCursor::WordUnderCursor);  
  324.   cursor.mergeCharFormat(format);   //把格式应用到光标所在的字符上  
  325.   showWidget->text->mergeCurrentCharFormat(format);   //调用这个函数将格式应用到选区内的所有字符上  
  326.   
  327. }  
  328.   
  329. //菜单的实现  
  330. void ImageProcessor::createMenus()  
  331. {  
  332.   //文件菜单  
  333.   fileMenu = menuBar()->addMenu(tr("file"));  
  334.   fileMenu->addAction(openFileAction);  
  335.   fileMenu->addAction(NewFileAction);  
  336.   fileMenu->addAction(PrintTextAction);  
  337.   fileMenu->addAction(PrintImageAction);  
  338.   fileMenu->addSeparator(); //分隔符  
  339.   fileMenu->addAction(exitAction);  
  340.   
  341.   //缩放菜单  
  342.   zoomMenu = menuBar()->addMenu(tr("zoom"));  //缩放  
  343.   zoomMenu->addAction(copyAction);  
  344.   zoomMenu->addAction(cutAction);  
  345.   zoomMenu->addAction(pasteAction);  
  346.   zoomMenu->addAction(aboutAction);  
  347.   zoomMenu->addSeparator(); //分隔符  
  348.   zoomMenu->addAction(zoomInAction);  
  349.   zoomMenu->addAction(zoomOutAction);  
  350.   
  351.   //旋转菜单  
  352.   rotateMenu = menuBar()->addMenu(tr("rotate"));  
  353.   rotateMenu->addAction(rotate90Action);  
  354.   rotateMenu->addAction(rotate180Action);  
  355.   rotateMenu->addAction(rotate270Action);  
  356.   
  357.   //镜像菜单  
  358.   mirrorMenu = menuBar()->addMenu(tr("mirror"));  
  359.   mirrorMenu->addAction(mirrorVerticalAction);  
  360.   mirrorMenu->addAction(mirrorHorizontalAction);  
  361.   
  362. }  
  363.   
  364. //动作的实现  
  365. void ImageProcessor::createActions()  
  366. {  
  367.   //排版的各种操作的触发事件  
  368.   actGrp = new QActionGroup(this);      //创建一个action组  
  369.   leftAction = new QAction(QIcon(":/left.png"), "left", actGrp);    //左对齐的图标  
  370.   leftAction->setCheckable(true);   //设定按钮是否可以选定  
  371.   
  372.   rightAction = new QAction(QIcon(":/right.png"), "right", actGrp);   //右对齐  
  373.   rightAction->setCheckable(true);  
  374.   
  375.   centerAction = new QAction(QIcon(":/center.png"), "center", actGrp);   //居中对齐  
  376.   centerAction->setCheckable(true);  
  377.   
  378.   justifyAction = new QAction(QIcon(":/justify.png"), "justify", actGrp);   //两端对齐  
  379.   justifyAction->setCheckable(true);  
  380.   
  381.   connect(actGrp, SIGNAL(triggered(QAction*)), this, SLOT(ShowAlignment(QAction*)));    //接受选择的action然后显示相应的结果  
  382.   
  383.   
  384.   //打开动作  
  385. //  qDebug()<<"11111111111111";  
  386.   openFileAction = new QAction(QIcon(":/open.png"), tr("open"), this);    //设置图片,名字  
  387.   openFileAction->setShortcut(tr("Ctrl+O"));    //设置快捷键  
  388.   openFileAction->setStatusTip(tr("open a file"));    //设置提示  
  389. //  qDebug()<<"222222222222222222";  
  390. //  connect(NewFileAction, SIGNAL(triggered()), this, SLOT(ShowNewFile()));   //连接上相应的槽  
  391.   connect(openFileAction, SIGNAL(triggered()), this, SLOT(ShowOpenFile()));  
  392.   
  393.   //新建动作  
  394.   NewFileAction = new QAction(QIcon(":/new.png"), tr("new"), this);    //设置图片,名字  
  395.   NewFileAction->setShortcut(tr("Ctrl+N"));    //设置快捷键  
  396.   NewFileAction->setStatusTip(tr("new a file"));    //设置提示  
  397.   connect(NewFileAction, SIGNAL(triggered()), this, SLOT(ShowNewFile()));   //连接上相应的槽  
  398.   
  399.   //退出动作  
  400.   exitAction = new QAction(tr("out"), this);    //设置图片,名字  
  401.   exitAction->setShortcut(tr("Ctrl+Q"));    //设置快捷键  
  402.   exitAction->setStatusTip(tr("close"));    //设置提示  
  403.   connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));  
  404.   
  405.   //复制  
  406.   copyAction = new QAction(QIcon(":/copy.png"), tr("out"), this);    //设置图片,名字  
  407.   copyAction->setShortcut(tr("Ctrl+C"));    //设置快捷键  
  408.   copyAction->setStatusTip(tr("copy file"));    //设置提示  
  409.   connect(copyAction, SIGNAL(triggered()), showWidget->text, SLOT(copy()));  
  410.   
  411.   //剪切  
  412.   cutAction = new QAction(QIcon(":/cut.png"), tr("cut"), this);    //设置图片,名字  
  413.   cutAction->setShortcut(tr("Ctrl+X"));    //设置快捷键  
  414.   cutAction->setStatusTip(tr("cut file"));    //设置提示  
  415.   connect(copyAction, SIGNAL(triggered()), showWidget->text, SLOT(cut()));  
  416.   
  417.   //粘贴  
  418.   pasteAction = new QAction(QIcon(":/paste.png"), tr("paste"), this);    //设置图片,名字  
  419.   pasteAction->setShortcut(tr("Ctrl+V"));    //设置快捷键  
  420.   pasteAction->setStatusTip(tr("paste file"));    //设置提示  
  421.   connect(copyAction, SIGNAL(triggered()), showWidget->text, SLOT(paste()));  
  422.   
  423.   //关于  
  424. //  QApplication *app;  
  425.   aboutAction = new QAction(tr("about"), this);  
  426.   connect(aboutAction, SIGNAL(triggered()), this, SLOT(QApplication::aboutQt()));  
  427.   
  428.   //打印文本  
  429.   PrintTextAction = new QAction(QIcon(":/printText.png"), tr("printtext"), this);  
  430.   PrintTextAction->setStatusTip(tr("print a text"));  
  431.   connect(PrintTextAction, SIGNAL(triggered()), this, SLOT(ShowPrintText()));   //连接相应的动作  
  432.   
  433.   //打印图像  
  434.   PrintImageAction = new QAction(QIcon(":/printImage.png"), tr("printImage"), this);  
  435.   PrintImageAction->setStatusTip(tr("print a image"));  
  436.   connect(PrintImageAction, SIGNAL(triggered()), this, SLOT(ShowPrintImage()));  
  437.   
  438.   //放大图像  
  439.   zoomInAction = new QAction(QIcon(":/zoomin.png"), tr("get big"), this);  
  440.   zoomInAction->setStatusTip(tr("get big image"));  
  441.   connect(zoomInAction, SIGNAL(triggered()), this, SLOT(ShowZoomIn())); //进行图片放大  
  442.   
  443.   //缩小  
  444.   zoomOutAction = new QAction(QIcon(":/zoomout.png"), tr("get small"), this);  
  445.   zoomOutAction->setStatusTip(tr("get small image"));  
  446.   connect(zoomOutAction, SIGNAL(triggered()), this, SLOT(ShowZoomOut())); //进行图片放小  
  447.   
  448.   
  449.   //实现图片的选择动作  
  450.   //旋转90°  
  451.   rotate90Action = new QAction(QIcon(":/rotate90.png"), tr("get rotate90"), this);  
  452.   rotate90Action->setStatusTip(tr("get rotate90 image"));  
  453.   connect(rotate90Action, SIGNAL(triggered()), this, SLOT(ShowRotate90()));  
  454.   //180°  
  455.   rotate180Action = new QAction(QIcon(":/rotate180.png"), tr("get rotate180"), this);  
  456.   rotate180Action->setStatusTip(tr("get rotate180 image"));  
  457.   connect(rotate180Action, SIGNAL(triggered()), this, SLOT(ShowRotate180()));  
  458.   //270°  
  459.   rotate270Action = new QAction(QIcon(":/rotate270.png"), tr("get rotate270"), this);  
  460.   rotate270Action->setStatusTip(tr("get rotate270 image"));  
  461.   connect(rotate270Action, SIGNAL(triggered()), this, SLOT(ShowRotate270()));  
  462.   
  463.   
  464.   //实现图像镜像的动作  
  465.   //纵向  
  466.   mirrorVerticalAction = new QAction(QIcon("mirrorVertical.png"), tr("mirrorVertical"), this);  
  467.   mirrorVerticalAction->setStatusTip(tr("mirrorVertical the image"));  
  468.   connect(mirrorVerticalAction, SIGNAL(triggered()), this, SLOT(ShowMirrorVertical()));  
  469.   //横向  
  470.   mirrorHorizontalAction = new QAction(QIcon("mirrorHorizontal.png"), tr("mirrorHorizontal"), this);  
  471.   mirrorHorizontalAction->setStatusTip(tr("mirrorHorizontal the image"));  
  472.   connect(mirrorHorizontalAction, SIGNAL(triggered()), this, SLOT(ShowMirrorHorizontal()));  
  473.   
  474.   //实现撤销和恢复的动作  
  475.   //撤销和恢复  
  476.   undoAction = new QAction(QIcon(":/undo.png"), "undo"this);    //撤销  
  477.   connect(undoAction, SIGNAL(triggered()), showWidget->text, SLOT(undo()));  
  478.   
  479.   redoAction = new QAction(QIcon(":/redo.png"), "redo"this);    //重做  
  480.   connect(undoAction, SIGNAL(triggered()), showWidget->text, SLOT(redo()));  
  481.   
  482. }  
  483.   
  484.   
  485. //水平镜像  
  486. void ImageProcessor::ShowMirrorHorizontal()  
  487. {  
  488.   if(img.isNull())  
  489.     return;  
  490.   img = img.mirrored(truefalse);    //水平镜像  
  491.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));  
  492. }  
  493.   
  494. //垂直镜像  
  495. void ImageProcessor::ShowMirrorVertical()  
  496. {  
  497.   if(img.isNull())  
  498.     return;  
  499.   img = img.mirrored(falsetrue);    //垂直镜像  
  500.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));  
  501. }  
  502.   
  503. //旋转270度  
  504. void ImageProcessor::ShowRotate270()  
  505. {  
  506.   if(img.isNull())  
  507.     return;  
  508.   QMatrix matrix;  
  509.   matrix.rotate(270);    //旋转90度  
  510.   img = img.transformed(matrix);    //图像旋转之后再重新得到赋值  
  511.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));  
  512. }  
  513.   
  514. //旋转180度  
  515. void ImageProcessor::ShowRotate180()  
  516. {  
  517.   if(img.isNull())  
  518.     return;  
  519.   QMatrix matrix;  
  520.   matrix.rotate(180);    //旋转90度  
  521.   img = img.transformed(matrix);    //图像旋转之后再重新得到赋值  
  522.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));  
  523. }  
  524.   
  525. //旋转90度  
  526. void ImageProcessor::ShowRotate90()  
  527. {  
  528.   if(img.isNull())  
  529.     return;  
  530.   QMatrix matrix;  
  531.   matrix.rotate(90);    //旋转90度  
  532.   img = img.transformed(matrix);    //图像旋转之后再重新得到赋值  
  533.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));  
  534. }  
  535.   
  536. //实现图片的放小  
  537. void ImageProcessor::ShowZoomOut()  
  538. {  
  539.   //首先判断是否有照片  
  540.   if(img.isNull())  
  541.     return;   //没有照片,那就不用放大了  
  542.   QMatrix martix;   //一个图片的存放对象  
  543.   martix.scale(0.5, 0.5);   //长和宽都放小2倍  
  544.   img = img.transformed(martix);    //对图片的操作落实  
  545.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));   //改变后的图片放回去  
  546.   
  547. }  
  548.   
  549. //实现图片的放大  
  550. void ImageProcessor::ShowZoomIn()  
  551. {  
  552.   //首先判断是否有照片  
  553.   if(img.isNull())  
  554.     return;   //没有照片,那就不用放大了  
  555.   QMatrix martix;   //一个图片的存放对象  
  556.   martix.scale(2, 2);   //长和宽都放大2倍  
  557.   img = img.transformed(martix);    //对图片的操作落实  
  558.   showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));   //改变后的图片放回去  
  559.   
  560. }  
  561.   
  562. //实现打印图像功能的函数  
  563. void ImageProcessor::ShowPrintImage()  
  564. {  
  565.   QPrinter printer;  
  566.   QPrintDialog printDialog(&printer, this);  
  567.   //是否点击确定  
  568.   if(printDialog.exec())  
  569.     {  
  570.       QPainter painter(&printer);  
  571.       QRect rect = painter.viewport();    //获得QPainter对象的视角矩形区域  
  572.       QSize size = img.size();    //图片的尺寸  
  573.       size.scale(rect.size(), Qt::KeepAspectRatio);  
  574.   
  575.       painter.setViewport(rect.x(), rect.y(), size.width(), size.height());   //设置矩形区域  
  576.       painter.drawImage(0, 0, img);  
  577.     }  
  578.   
  579. }  
  580.   
  581. //实现打印文本功能  
  582. void ImageProcessor::ShowPrintText()  
  583. {  
  584. //  QP  
  585.   QPrinter printer;   //打印  
  586.   QPrintDialog printDialog(&printer, this);  
  587.   if(printDialog.exec())    //是否点击确定  
  588.     {  
  589.       QTextDocument *doc = showWidget->text->document();    //得到文档对象  
  590.       doc->print(&printer);   //开始打印  
  591.     }  
  592.   
  593. }  
  594.   
  595. //打开文件  
  596. void ImageProcessor::ShowOpenFile()  
  597. {  
  598.   fileName = QFileDialog::getOpenFileName(this);    //得到文件名  
  599.   if(!fileName.isEmpty())   //文件不为空  
  600.     {  
  601.       if(showWidget->text->document()->isEmpty()) //中心部件的内容的根节点不是空  
  602.         {  
  603.           loadFile(fileName);   //添加文件  
  604.         }  
  605.       else  
  606.         {  
  607.           ImageProcessor *newImageProcessor = new ImageProcessor;   //创建一个新的my word文档  
  608.           newImageProcessor->show();    //显示出来  
  609.           newImageProcessor->loadFile(fileName);    //添加文件  
  610.         }  
  611.     }  
  612. }  
  613.   
  614. //实现loadFile函数,这个文件的处理后面会再次进行学习  
  615. void ImageProcessor::loadFile(QString filename)  
  616. {  
  617.   printf("file name:%s\n", filename.data());    //输出文件名  
  618.   
  619.   QFile file(filename);  
  620.   if(file.open(QIODevice::ReadOnly|QIODevice::Text))  
  621.     {  
  622.       QTextStream textStream(&file);  
  623.       while(!textStream.atEnd())    //循环到后面  
  624.         {  
  625.           showWidget->text->append(textStream.readLine());    //给文档添加文件  
  626.           printf("read line\n");  
  627.         }  
  628.       printf("end\n");  
  629.     }  
  630.   
  631. }  
  632.   
  633. //新建文件槽  
  634. void ImageProcessor::ShowNewFile()  
  635. {  
  636. //  qDebug()<<"????";  
  637.   ImageProcessor *newImageProcessor = new ImageProcessor;  
  638.   newImageProcessor->show();    //一个新的文档显示  
  639. }  
  640.   
  641. ImageProcessor::~ImageProcessor()  
  642. {  
  643.   
  644. }  

main.cpp

[cpp]  view plain  copy
  1. /** 
  2. * 书本:【Qt5开发及实例】 
  3. * 功能:实现一个简单的文本编辑器 
  4. * 文件:showwidget.h 
  5. * 时间:2015年1月20日11:22:39 
  6. * 作者:cutter_point 
  7. */  
  8. #include "imageprocessor.h"  
  9.   
  10. #include   
  11. #include   
  12.   
  13. int main(int argc, char *argv[])  
  14. {  
  15.   QApplication a(argc, argv);  
  16.   
  17.   QFont f("ZYSong18030", 12);   //设置字体显示格式  
  18.   a.setFont(f);  
  19.   
  20.   ImageProcessor w;  
  21.   w.show();  
  22.   
  23.   return a.exec();  
  24. }  


3、结果展示

QT5与C++实现一个简单的文本编辑器_第1张图片


QT5与C++实现一个简单的文本编辑器_第2张图片QT5与C++实现一个简单的文本编辑器_第3张图片


卧槽,我又一张图传不上来,我也是醉了。


你可能感兴趣的:(QT)