QT_文本编辑器_源码下载

摘要:
源代码下载:链接:http://pan.baidu.com/s/1c21EVRy密码:qub8 qub8的主要功能是:创建、打开、保存、另存为、搜索(搜索时,需要将光标放在底部以查找所有内容,不知道为什么……找不到)、更改字体、编辑器背景色等。程序效果截图如下follows://imgprocessor.h1#ifndefIMG处理器_ H2#定义IMGPROCESSOR_ H3

源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8

实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不知道为什么...找不出来),改变字体,编辑器背景色等....

程序效果截图如下:

QT_文本编辑器_源码下载第1张

QT_文本编辑器_源码下载第2张
QT_文本编辑器_源码下载第3张

QT_文本编辑器_源码下载第4张QT_文本编辑器_源码下载第5张

代码如下:

//imgprocessor.h
  1 #ifndef IMGPROCESSOR_H
  2 #define IMGPROCESSOR_H
  3 
  4 #include "showwidget.h"
  5 
  6 #include <QMainWindow>
  7 #include <QApplication>
  8 #include <QPushButton>
  9 #include <QRadioButton>
 10 #include <QCheckBox>
 11 #include <QImage>
 12 #include <QLabel>
 13 #include <QMenu>
 14 #include <QMenuBar>
 15 #include <QSaveFile>
 16 #include <QAction>
 17 #include <QActionGroup>
 18 #include <QComboBox>
 19 #include <QSpinBox>
 20 #include <QToolBar>
 21 #include <QToolButton>
 22 #include <QFontComboBox>
 23 #include <QGridLayout>
 24 #include <QHBoxLayout>
 25 #include <QVBoxLayout>
 26 #include <QLineEdit>
 27 #include <QTextCursor>
 28 
 29 
 30 class ImgProcessor : public QMainWindow
 31 {
 32     Q_OBJECT
 33 
 34 public:
 35     ImgProcessor(QWidget *parent = 0);
 36     ~ImgProcessor();
 37     void createActions();                      //创建动作
 38     void createMenus();                        //创建菜单
 39     void createToolBars();                     //创建工具栏
 40     void loadFile(QString  filename);          //加载文件
 41     void mergeFormat(QTextCharFormat);         //合并格式
 42 private:
 43     //各项菜单栏
 44     QMenu *fileMenu;                           //文件菜单
 45     QMenu *zoomMenu;                           //缩放菜单
 46     QMenu *rotateMenu;                         //旋转
 47     QMenu *mirrorMenu;                         //镜像
 48     //放置图片
 49     QImage img;
 50 
 51     QString fileName;                          //打开文件名
 52     QString curFileName;                       //保存文件名
 53     //显示中心部件
 54     ShowWidget *showWidget;
 55 
 56     //查找对话框
 57 //    findDialog *find_dialog;
 58     QString str;
 59     QLabel *lineLabel;
 60     QLineEdit *lineEdit;
 61     QPushButton *findNextBtn;
 62     QPushButton *cancelBtn;
 63 
 64     QLabel *directLabel;
 65 
 66     QRadioButton *upBtn;
 67     QRadioButton *downBtn;
 68 
 69     QCheckBox *lowOrUpperBox;
 70 
 71     //替换对话框
 72     QString str2;
 73     QString str3;
 74     QLabel *lineLabel21;           //查找
 75     QLineEdit *lineEdit21;          //查找内容
 76     QLabel *lineLabel22;           //替换
 77     QLineEdit *lineEdit22;          //替换内容
 78     QPushButton *findNextBtn2;     //查找下一个
 79     QPushButton *subBtn2;          //替换按钮
 80     QPushButton *cancelBtn2;
 81 
 82     QLabel *directLabel2;
 83     QCheckBox *lowOrUpperBox2;
 84     bool findjudge;
 85 
 86 
 87     //文件菜单项
 88     QAction *openFileAction;                    //打开文件动作
 89     QAction *NewFileAction;                     //新建文件
 90     QAction *SaveAction;                        //保存文件
 91     QAction *SaveAsAction;                      //另存为文件
 92     QAction *PrintTextAction;                   //打印文本动作
 93     QAction *PrintImageAction;                  //打印图片
 94     QAction *exitAction;                        //退出动作
 95 
 96     //编辑菜单项
 97     QAction *copyAction;                        //复制动作
 98     QAction *cutAction;                         //剪贴
 99     QAction *pasteAction;                       //粘贴
100     QAction *findAction;                        //查找
101     QAction *subAction;                         //替换
102     QAction *aboutAction;                       //关于
103     QAction *zoomInAction;                      //放大
104     QAction *zoomOutAction;                     //缩小
105 
106     //旋转菜单栏--图像处理
107     QAction *rotate90Action;                    //90°
108     QAction *rotate180Action;                   //180°
109     QAction *rotate270Action;                   //270°
110 
111     //镜像菜单栏
112     QAction *mirrorVerticalAction;              //垂直镜像
113     QAction *mirrorHorizonAction;               //水平镜像
114     QAction *undoAction;                        //撤销
115     QAction *redoAction;                        //取消撤销
116 
117     //工具栏
118     QToolBar *fileTool;                         //文件-打开、新建、保存,另存为,打印文本(图像)
119     QToolBar *zoomTool;                         //缩放
120     QToolBar *rotateTool;                       //旋转
121     QToolBar *mirrorTool;                       //镜像
122     QToolBar *doToolBar;                        //撤销、回撤--操作
123 
124     //文本编辑
125     QLabel *fontLabel;                          //字体设置项
126     QFontComboBox *fontComboBox;                //字体选框
127     QLabel *fontLabel2;                         //大小
128     QComboBox *sizeComboBox;                    //大小选框
129     QToolButton *boldBtn;                       //加粗按钮
130     QToolButton *italicBtn;                     //斜体
131     QToolButton *underlineBtn;                  //下划线
132     QToolButton *colorBtn;                      //字体颜色
133     QToolButton *colorBackBtn;                  //背景颜色按钮
134     QToolBar *fontToolBar;                      //字体工具栏
135 
136     //排序设置项
137     QLabel *listLabel;
138     QComboBox *listComboBox;
139     QActionGroup *actGrp;
140     QAction *leftAction;                        //居左
141     QAction *rightAction;                       //局右
142     QAction *centerAction;                      //居中
143     QAction *justifyAction;                     //两端对齐
144     QToolBar *listToolBar;                      //排序工具栏
145 
146 protected slots:
147     void ShowNewFile();                         //新建文件
148     void ShowOpenFile();                        //打开文件
149     void ShowSaveFile();                        //保存文件
150     void ShowSaveAsFile();                      //另存为
151     void ShowFindDialog();                      //查找对话框
152     void ShowFindText();                        //查找
153     void ShowFindStr();
154 
155     void ShowSubDialog();                       //替换对话框
156     void ShowSubstitute();                      //替换
157     void ShowSubText();
158     void ShowSubText2();
159     void ShowFindStr2 ();
160 
161     void ShowPrintText();                       //打印文本
162     void ShowPrintImage();                      //打印图像
163     void ShowZoomIn();                          //放大功能
164     void ShowZoomOut();                         //缩小功能
165     void ShowRotate90();                        //旋转90°
166     void ShowRotate180();
167     void ShowRotate270();
168     void ShowMirrorVertical();                  //镜像--纵向镜像
169     void ShowMirrorHorizontal();                //横向镜像
170     void ShowFontComboBox(QString comboStr);    //显示字体框
171     void ShowSizeSpinBox(QString spinValue);    //大小自旋盒
172     void ShowBoldBtn();                         //加粗功能
173     void ShowItalicBtn();                       //显示斜体
174     void ShowUnderlineBtn();                    //下划线
175     void ShowColorBtn();
176     void ShowBackColorBtn();                    //背景颜色
177     //字符格式化
178     void ShowCurrentFormatChanged(const QTextCharFormat &fmt);
179 
180     void ShowList(int);                          //排序
181     void ShowAlignment(QAction *act);            //对齐方式
182     void ShowCursorPositionChanged();            //显示光标位置
183 
184 };
185 
186 #endif // IMGPROCESSOR_H

 //imgprocessor.cpp

  1 #include "imgprocessor.h"
  2 #include <QFileDialog>
  3 #include <QFile>
  4 #include <QTextStream>
  5 #include <QPrintDialog>
  6 #include <QPrinter>
  7 #include <QPainter>
  8 #include <QColor>
  9 #include <QColorDialog>
 10 #include <QTextList>
 11 #include <QMessageBox>
 12 #include <QDebug>
 13 
 14 ImgProcessor::ImgProcessor(QWidget *parent)
 15     : QMainWindow(parent)
 16 {
 17     setWindowTitle (tr("Easy Word"));         //设置窗体标题
 18     //创建放置图像QLabel和文本编辑器QTextEdit的QWidget对象showWidget,并将该QWidget对象设置
 19     //为中心部件
 20     showWidget = new ShowWidget(this);
 21     setCentralWidget (showWidget);
 22 
 23 //    find_dialog = new findDialog(this);
 24 
 25     curFileName = tr("");                     //初始化文件名
 26 
 27     //排序
 28     listLabel = new QLabel(tr("排序"));
 29     listComboBox = new QComboBox;
 30     listComboBox->addItem ("Standard");
 31     listComboBox->addItem ("QTextListFormat::ListDisc");    //圆盘
 32     listComboBox->addItem ("QTextListFormat::ListCircle");  //
 33     listComboBox->addItem ("QTextListFormat::ListSquare");  //方形
 34     listComboBox->addItem ("QTextListFormat::ListDecimal"); //十进制
 35     listComboBox->addItem ("QTextListformat::ListLowerAlpha"); //小写字母
 36     listComboBox->addItem ("QTextListFormat::ListUpperAlpha"); //大写字母
 37     listComboBox->addItem ("QTextListformat::ListLowerRoman"); //小写罗马字符
 38     listComboBox->addItem ("QTextListFormat::ListUpperRoman"); //大写罗马字符
 39 
 40     //在工具栏上嵌入控件:字体,大小,粗体,斜体,字体颜色
 41     //字体--这里的字体,字号仅仅是下拉列表框改变
 42     fontLabel = new QLabel(tr("字体:"));
 43     fontComboBox = new QFontComboBox;
 44     //setFontFilter--接口过滤(只在下拉列表框中显示某一类字体,默认情况下为QFontComboBox::AllFonts
 45     //列出所有字体
 46     fontComboBox->setFontFilters (QFontComboBox::ScalableFonts);
 47 
 48     //字号
 49     fontLabel2 = new QLabel(tr("字号:"));
 50     sizeComboBox = new QComboBox;
 51 
 52     /**QFontDatabase-实现在字号下拉列表框中填充各种不同的字号条目
 53      * 其用于表示当前系统中所有可用的格式信息,主要是字体和字号大小
 54      * provide information about the fonts avaliable in the underlying(潜在) window system*/
 55 
 56     QFontDatabase db;
 57 
 58     //standardSize(): return a list of standard font size(返回可用标准字号的列表).
 59     foreach (int size, db.standardSizes ())
 60         sizeComboBox->addItem (QString::number (size)); //将它们插入到字号下拉框中
 61 
 62     //加粗
 63     boldBtn = new QToolButton;
 64     boldBtn->setIcon (QIcon("bold.png"));
 65     //设置成是否是开关(toggle)按钮(true)---即可复选的
 66     boldBtn->setCheckable (true);
 67 
 68     //斜体
 69     italicBtn = new QToolButton;
 70     italicBtn->setIcon (QIcon("italic.png"));
 71     italicBtn->setCheckable (true);
 72 
 73     //下划线
 74     underlineBtn = new QToolButton;
 75     underlineBtn->setIcon (QIcon("underline.png"));
 76     underlineBtn->setCheckable (true);
 77 
 78     //颜色
 79     colorBtn = new QToolButton;
 80     colorBtn->setIcon (QIcon("color.png"));
 81     colorBtn->setCheckable (true);
 82 
 83     //背景颜色
 84     colorBackBtn = new QToolButton;
 85     colorBackBtn->setIcon (QIcon("color.png"));
 86     colorBtn->setCheckable (true);
 87 
 88     /* 创建动作、菜单、工具栏函数 */
 89     createActions ();
 90     createMenus ();
 91     createToolBars ();
 92     if (img.load ("image.png"))
 93     {
 94         //在imageLabel对象放置图像
 95         showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
 96     }
 97 
 98     //连接槽函数
 99     connect (fontComboBox, SIGNAL(activated(QString)), this, SLOT(ShowFontComboBox(QString)));
100     connect (sizeComboBox, SIGNAL(activated(QString)), this, SLOT(ShowSizeSpinBox(QString)));
101     connect (boldBtn, SIGNAL(clicked(bool)), this, SLOT(ShowBoldBtn()));
102     connect (italicBtn, SIGNAL(clicked(bool)), this, SLOT(ShowItalicBtn()));
103     connect (underlineBtn, SIGNAL(clicked(bool)), this, SLOT(ShowUnderlineBtn()));
104     connect (colorBtn, SIGNAL(clicked(bool)), this , SLOT(ShowColorBtn()));
105     connect (colorBackBtn, SIGNAL(clicked(bool)),this, SLOT(ShowBackColorBtn()));
106 
107     //设置字符格式--之前的字符的字体,字号,仅仅是下拉列表框的改变, 还需要调用此函数改变文本字体
108     //当光标所在字符格式发生变化时调用此槽函数,函数根据 新的字符格式 将 工具栏 各个格式的显示更新??
109     connect (showWidget->text, SIGNAL(currentCharFormatChanged(QTextCharFormat)),
110              this, SLOT(ShowCurrentFormatChanged(QTextCharFormat)));
111 
112     connect (listComboBox, SIGNAL(activated(int)), this, SLOT(ShowList(int)));
113     //连接撤销信号和 rede按钮显示状况相连接
114     connect (showWidget->text->document (), SIGNAL(undoAvailable(bool)),
115              redoAction, SLOT(setEnabled(bool)));
116     connect (showWidget->text->document (), SIGNAL(redoAvailable(bool)),
117              redoAction, SLOT(setEnabled(bool)));
118     //用于排版
119     connect (showWidget->text, SIGNAL(cursorPositionChanged()),
120              this, SLOT(ShowCursorPositionChanged()));
121 }
122 
123 //动作(Action)的实现
124 void ImgProcessor::createActions ()
125 {
126 
127     //基于文件操作的动作(Action)的代码
128     //“打开”动作
129     //在创建“打开文件”动作的同时,指定了此动作使用的图标、名称及父窗口
130     openFileAction = new QAction(QIcon("open.png"), tr("打开"), this);
131     //设定此动作的组合键为【Ctrl+O】。
132     openFileAction->setShortcut (tr("Ctrl+O"));
133     //设定了状态条显示,当鼠标移至此动作对应的菜单条目或工具栏按钮上时,在状态条上显示"打开xxx"提示
134     openFileAction->setStatusTip (tr("打开一个文件"));
135     connect (openFileAction, SIGNAL(triggered(bool)), this, SLOT(ShowOpenFile()));
136 
137     //“新建”动作
138     NewFileAction = new QAction(QIcon("new.png"), tr("新建"), this);
139     NewFileAction->setShortcut (tr("Ctrl+N"));
140     NewFileAction->setStatusTip (tr("新建一个文件"));
141     connect (NewFileAction, SIGNAL(triggered(bool)), this, SLOT(ShowNewFile()));
142 
143     //“保存”动作
144     SaveAction = new QAction(QIcon("save.png"), tr("保存"), this);
145     SaveAction->setShortcut (tr("Ctrl+S"));
146     SaveAction->setStatusTip (tr("保存一个文件"));
147     connect (SaveAction, SIGNAL(triggered(bool)), this, SLOT(ShowSaveFile()));
148 
149     //“另存为”动作
150     SaveAsAction = new QAction(tr("另存为"), this);
151     SaveAsAction->setShortcut (tr("Ctrl+alt+S"));
152     SaveAsAction->setStatusTip (tr("另存为"));
153     connect (SaveAsAction, SIGNAL(triggered(bool)), this, SLOT(ShowSaveAsFile()));
154 
155     //“退出”动作
156     exitAction = new QAction(tr("退出"), this);
157     exitAction->setShortcut (tr("Ctrl+Q"));
158     exitAction->setStatusTip (tr("退出程序"));
159     connect (exitAction, SIGNAL(triggered(bool)), this, SLOT(close()));
160 
161     //"复制"动作
162     copyAction = new QAction(QIcon("copy.png"), tr("复制"), this);
163     copyAction->setShortcut (tr("Ctrl+C"));
164     copyAction->setStatusTip (tr("复制"));
165     //连接引发信号 和 中心部件的文本编辑框 复制信号
166     connect (copyAction, SIGNAL(triggered(bool)), showWidget->text, SLOT(copy()));
167 
168     //“剪切”信号
169     cutAction = new QAction(QIcon("cut.png"), tr("剪贴"), this);
170     cutAction->setShortcut (tr("Ctrl+X"));
171     cutAction->setStatusTip (tr("剪切文件"));
172     connect (cutAction, SIGNAL(triggered(bool)), showWidget->text, SLOT(cut()));
173 
174     //"粘贴"动作
175     pasteAction = new QAction(QIcon("paste.png"), tr("粘贴"), this);
176     pasteAction->setShortcut (tr("Ctrl+V"));
177     pasteAction->setStatusTip (tr("粘贴文件"));
178     connect (pasteAction, SIGNAL(triggered(bool)), showWidget->text, SLOT(paste()));
189 
190     findAction = new QAction(QIcon("find.png"), tr("查找"), this);
191     findAction->setShortcut (tr("Ctrl+f"));
192     findAction->setStatusTip (tr("查找文件"));
193     connect (findAction, SIGNAL(triggered(bool)), this, SLOT(ShowFindDialog()));
194 
195     subAction = new QAction(QIcon("sub.png"), tr("替换"), this);
196     subAction->setShortcut (tr("Ctrl+H"));
197     subAction->setStatusTip (tr("替换"));
198     connect (subAction, SIGNAL(triggered(bool)), this, SLOT(ShowSubDialog()));
199 
200     //“关于"动作
201     aboutAction = new QAction(tr("关于"), this);
202     connect (aboutAction, SIGNAL(triggered(bool)), this, SLOT(QApplication::aboutQt ()));
203 
204     //实现打印文本和图像、图像缩放和镜像的动作(Action)的代码
205     //“打印文本”动作
206     PrintTextAction = new QAction(QIcon("printText.png"), tr("打印文本"), this);
207     PrintTextAction->setStatusTip (tr("打印一个文本"));
208     connect (PrintTextAction, SIGNAL(triggered(bool)), this, SLOT(ShowPrintText()));
209 
210     //“打印图像”动作
211     PrintImageAction = new QAction(QIcon("printImage.png"), tr("打印图像"), this);
212     PrintImageAction->setStatusTip (tr("打印一幅图像"));
213     connect (PrintImageAction, SIGNAL(triggered(bool)), this, SLOT(ShowPrintImage()));
214 
215     //“放大”动作
216     zoomInAction = new QAction(QIcon("zoomin.png"), tr("放大"), this);
217     zoomInAction->setStatusTip (tr("放大一张图片"));
218     connect (zoomInAction, SIGNAL(triggered(bool)), this, SLOT(ShowZoomIn()));
219 
220     //"缩小"动作
221     zoomOutAction = new QAction(QIcon("zoomout.png"), tr("缩小"), this);
222     zoomOutAction->setStatusTip (tr("缩小一张图片"));
223     connect (zoomOutAction, SIGNAL(triggered(bool)), this, SLOT(ShowZoomOut()));
224 
225     //实现图像旋转动作(Action)
226     //旋转90°
227     rotate90Action = new QAction(QIcon("rotate90.png"), tr("旋转 90°"), this);
228     rotate90Action->setStatusTip (tr("将一幅图旋转 90°"));
229     connect (rotate90Action, SIGNAL(triggered(bool)), this, SLOT(ShowRotate90()));
230 
231     //旋转180°
232     rotate180Action = new QAction(QIcon("rotate180.png"), tr("旋转 180°"), this);
233     rotate180Action->setStatusTip (tr("将一幅图旋转 180°"));
234     connect (rotate180Action, SIGNAL(triggered(bool)), this, SLOT(ShowRotate180()));
235 
236     //旋转270°
237     rotate270Action = new QAction(QIcon("rotate270.png"), tr("旋转 270°"), this);
238     rotate270Action->setStatusTip (tr("将一幅图旋转 270°"));
239     connect (rotate270Action, SIGNAL(triggered(bool)), this, SLOT(ShowRotate270()));
240 
241     //实现图像镜像的动作(Action)
242     //纵向镜像
243     mirrorVerticalAction = new QAction(QIcon("mirrorVertical.png"), tr("纵向镜像"), this);
244     mirrorVerticalAction->setStatusTip (tr("对一幅图做纵镜像"));
245     connect (mirrorVerticalAction, SIGNAL(triggered(bool)), this, SLOT(ShowMirrorVertical()));
246 
247     //横向镜像
248     mirrorHorizonAction = new QAction(QIcon("mirrorHorizontal.png"), tr("横向镜像"), this);
249     mirrorHorizonAction->setStatusTip (tr("对一幅图做横镜像"));
250     connect (mirrorHorizonAction, SIGNAL(triggered(bool)), this, SLOT(ShowMirrorHorizontal()));
251 
252     //实现撤销和恢复的动作(Action)
253     undoAction = new QAction(QIcon("undo.png"), "撤销", this);
254     connect (undoAction, SIGNAL(triggered(bool)), showWidget->text, SLOT(undo()));
255     redoAction = new QAction(QIcon("redo.png"), "重做", this);
256     connect (redoAction, SIGNAL(triggered(bool)), showWidget->text, SLOT(redo()));
257 
258     //排序: 左对齐、右对齐、居中、两端对齐
259     //setCheckable()只能是可选择的,或不能选择的.选中了,就不能取消选中状态(不可复选)
260     //setChecked()可以是选中的,或者是非选中的(可复选)
261     actGrp = new QActionGroup(this);
262     leftAction = new QAction(QIcon("left.png"), "左对齐", actGrp);
263     leftAction->setCheckable (true);
264     rightAction = new QAction(QIcon("right.png"), "右对齐", actGrp);
265     rightAction->setCheckable (true);
266     centerAction = new QAction(QIcon("center.png"), "居中", actGrp);
267     centerAction->setCheckable (true);
268     justifyAction = new QAction(QIcon("justify.png"), "两端对齐", actGrp);
269     justifyAction->setCheckable (true);
270     //按下某个对齐按钮的响应,根据比较判断触发的是哪个对齐按钮
271     connect (actGrp, SIGNAL(triggered(QAction*)), this, SLOT(ShowAlignment(QAction*)));
272 
273 }
274 
275 //实现了各个动作之后,需要将它们通过菜单,工具栏或快捷键的方式体现出来.
276 //菜单的实现
277 void ImgProcessor::createMenus ()
278 {
279     //文件菜单
280     //直接调用QMainWindow的menuBar()函数即可得到主窗口的菜单条指针,再调用菜单条
281     //QMenuBar的addMenu()函数,即可完成在菜单条中插入一个新菜单fileMenu,fileMenu()函数为一个
282     //QMenu类对象
283     fileMenu = menuBar ()->addMenu (tr("文件"));
284     fileMenu->addAction(openFileAction);
285     fileMenu->addAction(NewFileAction);
286     fileMenu->addAction(SaveAction);
287     fileMenu->addAction(SaveAsAction);
288     fileMenu->addAction(PrintTextAction);
289     fileMenu->addAction(PrintImageAction);
290     fileMenu->addSeparator ();             //添加分割
291     fileMenu->addAction(exitAction);
292     //编辑菜单(缩放...)
293     zoomMenu = menuBar ()->addMenu (tr("编辑"));
294     zoomMenu->addAction(copyAction);
295     zoomMenu->addAction(cutAction);
296     zoomMenu->addAction(pasteAction);
297     zoomMenu->addAction(findAction);
298     zoomMenu->addAction(subAction);
299     zoomMenu->addAction(aboutAction);
300     zoomMenu->addSeparator ();
301     zoomMenu->addAction(zoomInAction);
302     zoomMenu->addAction(zoomOutAction);
303     //旋转菜单
304     rotateMenu = menuBar ()->addMenu (tr("旋转"));
305     rotateMenu->addAction(rotate90Action);
306     rotateMenu->addAction(rotate180Action);
307     rotateMenu->addAction(rotate270Action);
308     //镜像菜单
309     mirrorMenu = menuBar ()->addMenu (tr("镜像"));
310     mirrorMenu->addAction(mirrorVerticalAction);
311     mirrorMenu->addAction(mirrorHorizonAction);
312 }
313 
314 //工具栏的实现(ToolBars)的实现
315 void ImgProcessor::createToolBars ()
316 {
317     //文件工具条
318     //直接调用QMainWindow的addToolBar()函数即可获得主窗口的工具条对象,每新增一个工具条
319     //调用一次addToolBar()函数,赋予不同的名称,即可在主窗口中新增一个工具条
320     fileTool = addToolBar ("File");
321     //调用QToolBar的addAction()函数在工具条中插入属于本工具条的动作.
322     //这些工具条可以在工具栏单击右键,将弹出工具条显示的选择菜单
323     fileTool->addAction(openFileAction);
324     fileTool->addAction(NewFileAction);
325     fileTool->addAction(SaveAction);
326     fileTool->addAction(PrintTextAction);
327     fileTool->addAction(PrintImageAction);
328     //编辑工具条
329     zoomTool = addToolBar ("Edit");
330     zoomTool->addAction(copyAction);
331     zoomTool->addAction(cutAction);
332     zoomTool->addAction(pasteAction);
333     zoomTool->addSeparator ();
334     zoomTool->addAction(zoomInAction);
335     zoomTool->addAction(zoomOutAction);
336     //旋转工具条
337     rotateTool = addToolBar ("rotate");
338     rotateTool->addAction(rotate90Action);
339     rotateTool->addAction(rotate180Action);
340     rotateTool->addAction(rotate270Action);
341     //撤销和重做工具条
342     doToolBar = addToolBar ("doEdit");
343     doToolBar->addAction(undoAction);
344     doToolBar->addAction(redoAction);
345     /***
346      * 工具条是可移动窗口,停靠的区域由QToolBar的allowAreas决定
347      * Qt::LeftToolBarArea、Qt::RightToolBarArea、Qt::TopToolBarArea、
348      * Qt::BottomToolBarArea, Qt::AllToolBarAreas(默认)。
349      * 可以通过调用setAllowAreas()函数来指定工具条可停靠的区域
350      * 如:fileTool->setAllowAreas(Qt::TopToolBarArea|Qt::LeftToolBarArea);
351      * 来限定fileTool只能出现在主窗口的顶部或者左侧.工具条也可通过setMovable()设定可移动性:
352      * 如fileTool->setMovable (false)来指定文件工具条不可移动 */
353 
354     //字体工具条
355     fontToolBar = addToolBar ("Font");
356     fontToolBar->addWidget (fontLabel);
357     fontToolBar->addWidget (fontComboBox);
358     fontToolBar->addWidget (fontLabel2);
359     fontToolBar->addWidget (sizeComboBox);
360     fontToolBar->addSeparator ();
361     fontToolBar->addWidget (boldBtn);
362     fontToolBar->addWidget (italicBtn);
363     fontToolBar->addWidget (underlineBtn);
364     fontToolBar->addSeparator ();
365     fontToolBar->addWidget (colorBtn);
366     fontToolBar->addSeparator ();
367     fontToolBar->addWidget (colorBackBtn);
368 
369     //排序工具条
370     listToolBar = addToolBar ("list");
371     listToolBar->addWidget (listLabel);
372     listToolBar->addWidget (listComboBox);
373     listToolBar->addSeparator ();
374     listToolBar->addActions(actGrp->actions ());
375 }
376 
377 //文件操作功能
378 //新建文件
379 void ImgProcessor::ShowNewFile ()
380 {
381     ImgProcessor *newImgProcessor = new ImgProcessor;
382     newImgProcessor->show ();
383 }
384 
385 //打开文件
386 void ImgProcessor::ShowOpenFile ()
387 {
388     fileName = QFileDialog::getOpenFileName(this, "打开");
389     curFileName = fileName;
390     if (!fileName.isEmpty ())       //文件名不为空
391     {
392         //原窗口内容为空,则直接加载该文件
393         if (showWidget->text->document ()->isEmpty ())
394         {
395             loadFile (fileName);    //loadFile()函数实现在下方.
396         }
397         //否则,打开新窗口加载文件
398         else
399         {
400             ImgProcessor *newImgProcessor = new ImgProcessor;
401             newImgProcessor->show ();
402             newImgProcessor->loadFile (fileName);
403         }
404     }
405 }
406 
407 //loadFile()函数实现,利用QFile和QTextStream完成具体读取文件内容工作
408 void ImgProcessor::loadFile (QString filename)
409 {
410     printf ("file name:%s
", (char*)filename.data ());
411     QFile file(filename);     //获取文件
412     if (file.open (QIODevice::ReadOnly | QIODevice::Text))
413     {
414         //提供基于文本流的功能(对于ASCII文本)
415         QTextStream textStream(&file);
416         while (!textStream.atEnd ())      //判断是否到文件流或文件终点
417         {
418             //读取流中的一行,并返回包含文本的返回的字符串
419             //(不包含任何换行符合回车符-不同于QIODevice::readline()--不会省略最后换行符).
420             showWidget->text->append (textStream.readLine ());
421             printf("read line
");
422         }
423         printf("end
");
424     }
425 }
426 
427 //保存文件
428 void ImgProcessor::ShowSaveFile ()
429 {
430     if (curFileName.isEmpty ())    //原路径文件名
431     {
432         QString filename = QFileDialog::getSaveFileName (this, tr("保存文件"),
433                                                          QString(), tr("文本文件(*.txt);;c++文件(*h *cpp *hpp"));
434         if (!filename.isEmpty ()) {
435             QFile file(filename);
436             if (!file.open (QIODevice::WriteOnly)) {
437                 QMessageBox::critical (this, tr("错误"), tr("不能打开文件"));
438                 return;
439             }
440             curFileName = filename;      //下次保存,默认同一条路径
441             QTextStream outs(&file);
442             outs << showWidget->text->toPlainText ();
443             outs.flush ();
444             file.close ();
445         }
446     }
447     else {
448         QFile file(curFileName);
449         if (!file.open (QIODevice::WriteOnly)) {
450             QMessageBox::critical (this, tr("错误"), tr("不能打开文件"));
451             return;
452         }
453         QTextStream outs(&file);
454         outs << showWidget->text->toPlainText ();
455         outs.flush ();
456         file.close ();
457     }
458 
459 }
460 
461 //另存为
462 void ImgProcessor::ShowSaveAsFile ()
463 {
464     QString filename = QFileDialog::getSaveFileName (this, tr("保存文件"),
465                                                      QString(), tr("文本文件(*.txt);;c++文件(*.h *.cpp *.hpp)"));
466     if (!filename.isEmpty ()) {
467         QFile file(filename);
468         if (!file.open (QIODevice::WriteOnly)) {
469             QMessageBox::critical (this, tr("错误"), tr("不能打开文件"));
470             return;
471         }
472         QTextStream outs(&file);
473         //将text->toPlainText()返回文本编辑的纯文本,outs<<将纯文本写入流
474         outs << showWidget->text->toPlainText ();
475         outs.flush ();
476         file.close ();
477     }
478 }
479 
480 //显示查找对话框
481 void ImgProcessor::ShowFindDialog ()
482 {
483     QDialog *FindDialog = new QDialog(this);
484     QGridLayout *mainLayout = new QGridLayout(FindDialog);
485 
486     lineLabel = new QLabel(tr("查找内容(N): "));
487     lineEdit = new QLineEdit;
488 
489     QHBoxLayout *inputLayout = new QHBoxLayout;
490     inputLayout->addWidget (lineLabel);
491     inputLayout->addWidget (lineEdit);
492 
493     findNextBtn = new QPushButton(tr("查找下一个"));
494     cancelBtn = new QPushButton(tr("取消"));
495     connect (cancelBtn, SIGNAL(clicked(bool)), FindDialog, SLOT(reject()));
496 
497     QVBoxLayout *buttonLayout = new QVBoxLayout;
498     buttonLayout->addWidget (findNextBtn);
499     buttonLayout->addWidget (cancelBtn);
500 
501     directLabel = new QLabel(tr("方向"));
502     upBtn = new QRadioButton(tr("向上"));
503 
504 
505     upBtn->setChecked (true);
506 //    findNextBtn->setEnabled (false);
507 
508     downBtn = new QRadioButton(tr("向下"));
509 
510     lowOrUpperBox = new QCheckBox(tr("区分大小写(C)"));
511 
512     mainLayout->addLayout (inputLayout, 0, 0, 1, 3);
513     mainLayout->addLayout (buttonLayout, 0, 4, 2, 1);
514     mainLayout->addWidget (lowOrUpperBox, 2, 0);
515     mainLayout->addWidget (directLabel, 1, 1);
516     mainLayout->addWidget (upBtn, 2, 1);
517     mainLayout->addWidget (downBtn, 2, 2);
518 
519     FindDialog->show ();
520     str = "";
521     connect (lineEdit, SIGNAL(textChanged(QString)), this, SLOT(ShowFindText()));
522     connect (findNextBtn, SIGNAL(clicked(bool)), this, SLOT(ShowFindStr()));
523 }
524 
525 void ImgProcessor::ShowFindText ()
526 {
527     str = lineEdit->text ();
528 }
529 
530 void ImgProcessor::ShowFindStr ()
531 {
532 //    qDebug() << str;
533     bool judge;
534     if (!str.isEmpty ()) {
535         if (upBtn->isChecked () == Qt::Checked) {
536             if (lowOrUpperBox->isChecked () == Qt::Checked)
537                 judge = showWidget->text->find (str,QTextDocument::FindCaseSensitively);
538             else {
539                 judge = showWidget->text->find (str);
540             }
541         }
542         else {
543             if (lowOrUpperBox->isChecked () == Qt::Checked) {
544                 judge = showWidget->text->find (str, QTextDocument::FindCaseSensitively);
545             }
546             else {
547                 judge = showWidget->text->find (str, QTextDocument::FindBackward);
548             }
549         }
550     }
551     else {
552         return;
553     }
554     if (!judge) {
555         QMessageBox::information (this, tr("结果"), tr("没找到查找内容"),
556                                   QMessageBox::Yes);
557     }
558 }
559 
560 //替换对话框
561 void ImgProcessor::ShowSubDialog ()
562 {
563     QDialog *SubDialog = new QDialog(this);
564     QGridLayout *mainLayout = new QGridLayout(SubDialog);
565 
566     lineLabel21 = new QLabel(tr("查找内容(N): "));
567     lineEdit21 = new QLineEdit;
568 
569     lineLabel22 = new QLabel(tr("替换(P): "));
570     lineEdit22 = new QLineEdit;
571 
572     QHBoxLayout *inputLayout = new QHBoxLayout;
573     inputLayout->addWidget (lineLabel21);
574     inputLayout->addWidget (lineEdit21);
575 
576     QHBoxLayout *inputLayout2 = new QHBoxLayout;
577     inputLayout2->addWidget (lineLabel22);
578     inputLayout2->addWidget (lineEdit22);
579 
580     findNextBtn2 = new QPushButton(tr("查找下一个"));
581     subBtn2 = new QPushButton(tr("替换"));
582     cancelBtn2 = new QPushButton(tr("取消"));
583     connect (cancelBtn2, SIGNAL(clicked(bool)), SubDialog, SLOT(reject()));
584 
585     QVBoxLayout *buttonLayout = new QVBoxLayout;
586     buttonLayout->addWidget (findNextBtn2);
587     buttonLayout->addWidget (subBtn2);
588     buttonLayout->addWidget (cancelBtn2);
589 
590     lowOrUpperBox = new QCheckBox(tr("区分大小写(C)"));
591 
592     mainLayout->addLayout (inputLayout, 0, 0, 1, 3);
593     mainLayout->addLayout (inputLayout2, 1, 0, 1, 3);
594     mainLayout->addLayout (buttonLayout, 0, 4, 3, 1);
595     mainLayout->addWidget (lowOrUpperBox, 2, 0);
596 
597     SubDialog->show ();
598     str2 = "";
599     str3 = "";
600     findjudge = false;
601     connect (lineEdit21, SIGNAL(textChanged(QString)), this, SLOT(ShowSubText()));
602     connect (lineEdit22, SIGNAL(textChanged(QString)), this, SLOT(ShowSubText2()));
603     connect (findNextBtn2, SIGNAL(clicked(bool)), this, SLOT(ShowFindStr2()));
604     connect (subBtn2, SIGNAL(clicked(bool)), this, SLOT(ShowSubstitute()));
605 }
606 
607 void ImgProcessor::ShowSubText ()
608 {
609     str2 = lineEdit21->text ();
610 }
611 
612 void ImgProcessor::ShowSubText2 ()
613 {
614     str3 = lineEdit22->text ();
615 }
616 
617 void ImgProcessor::ShowFindStr2 ()
618 {
619     bool judge2;
620     if (!str2.isEmpty ()) {
621         if (lowOrUpperBox->isChecked () == Qt::Checked)
622             judge2 = showWidget->text->find (str2,QTextDocument::FindCaseSensitively);
623         else {
624             judge2 = showWidget->text->find (str2, QTextDocument::FindBackward);
625         }
626     }
627     else {
628         return;
629     }
630     if (!judge2) {
631         QMessageBox::information (this, tr("结果"), tr("没找到查找内容"),
632                                   QMessageBox::Yes);
633     }
634 }
635 
636 
637 void ImgProcessor::ShowSubstitute ()
638 {
639     QTextCursor textCur;
640     int judge2;
641     if (!str2.isEmpty ()) {
642         if (lowOrUpperBox->isChecked () == Qt::Checked) {
643             judge2 = showWidget->text->find (str2,QTextDocument::FindCaseSensitively);
644             textCur = showWidget->text->textCursor ();
645         }
646         else {
647             judge2 = showWidget->text->find (str2, QTextDocument::FindBackward);
648             textCur = showWidget->text->textCursor ();
649         }
650     }
651     else {
652         return;
653     }
654     if (!judge2) {
655         QMessageBox::information (this, tr("结果"), tr("没找到查找内容"),
656                                   QMessageBox::Yes);
657     }
658     else {
659          textCur.insertText (str3);
660     }
661 
662 }
663 
664 //打印文本
665 void ImgProcessor::ShowPrintText ()
666 {
667     QPrinter printer;
668     //创建一个QPrintDialog对象,参数为QPrinter对象
669     QPrintDialog printDialog(&printer, this);
670     //判断打印对话框显示后用户是否单击“打印”,打印--则相关打印属性将可以通过创建QPrintDialog
671     //对象时,使用的QPrinter对象获得;单击取消,则不执行后续的打印操作
672     if (printDialog.exec ())
673     {
674         //获得QTextEdit对象的文档
675         QTextDocument *doc = showWidget->text->document ();
676         //打印
677         doc->print (&printer);
678     }
679 
680 }
681 
682 //打印图像
683 void ImgProcessor::ShowPrintImage ()
684 {
685     QPrinter printer;
686     QPrintDialog printDialog(&printer, this);
687     if (printDialog.exec ())
688     {
689         //创建一个QPainter对象,并指定绘图设备为一个QPrinter对象
690         QPainter painter(&printer);
691         //获得QPainter对象的视图矩形区域
692         QRect rect = painter.viewport ();
693 
694         QSize size = img.size ();                        //获得图像大小
695         /* 按照图形的比例大小重新设置视图矩形区域 */
696         //Qt::KeepAspectRatio:  按照图形比例大小,保持宽高比例,尽可能大的在矩形内
697         size.scale (rect.size (), Qt::KeepAspectRatio);  //图像大小改变
698         //重新得到painter对象的视图矩形区域
699         //设置QPainter的视图矩形区域at(x,y) with the given width and height
700         painter.setViewport (rect.x (), rect.y (), size.width (), size.height ());
701         painter.setWindow (img.rect ());      //设置QPainter窗口大小为图像的大小
702         painter.drawImage (0, 0, img);        //打印图像at(0,0)
703     }
704 }
705 
706 //放大
707 void ImgProcessor::ShowZoomIn ()
708 {
709     if (img.isNull ())     //有效性判断
710         return;
711     QMatrix matrix;        //声明一个QMatrix类的实例
712     //按照2倍比例对水平和垂直方向进行放大,并将当前显示的图形按照该坐标矩阵进行转换
713     matrix.scale (2, 2);
714     img = img.transformed (matrix);
715     //重新设置显示图形
716     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
717 }
718 
719 //缩小
720 void ImgProcessor::ShowZoomOut ()
721 {
722     if (img.isNull ())
723         return;
724     QMatrix matrix;
725     matrix.scale (0.5, 0.5);
726     img = img.transformed (matrix);
727     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
728 
729 }
730 
731 //旋转90°
732 void ImgProcessor::ShowRotate90 ()
733 {
734     if (img.isNull ())
735         return;
736     QMatrix matrix;
737     matrix.rotate (90);
738     img = img.transformed (matrix);
739     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
740 }
741 
742 void ImgProcessor::ShowRotate180 ()
743 {
744     if (img.isNull ())
745         return;
746     QMatrix matrix;
747     matrix.rotate (180);
748     img = img.transformed (matrix);
749     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
750 }
751 
752 void ImgProcessor::ShowRotate270 ()
753 {
754     if (img.isNull ())
755         return;
756     QMatrix matrix;
757     matrix.rotate (270);
758     img = img.transformed (matrix);
759     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
760 }
761 
762 //镜像--垂直
763 void ImgProcessor::ShowMirrorVertical ()
764 {
765     if (img.isNull ())
766         return;
767     //Qimage Qimage::mirrored(bool horizontal = false, bool vertical = true);
768     //垂直镜像
769     img = img.mirrored (false, true);
770     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
771 }
772 
773 //水平镜像
774 void ImgProcessor::ShowMirrorHorizontal ()
775 {
776     if (img.isNull ())
777         return;
778     //Qimage Qimage::mirrored(bool horizontal = true, bool vertical = false);
779     //水平镜像
780     img = img.mirrored (true, false);
781     showWidget->imageLabel->setPixmap (QPixmap::fromImage (img));
782 }
783 
784 //设置字体格式
785 //字体
786 void ImgProcessor::ShowFontComboBox (QString comboStr)
787 {
788     QTextCharFormat fmt;            //创建一个QTextCharFormat对象
789     fmt.setFontFamily (comboStr);   //选择的字体名称设置给QTextCharFormat对象
790     mergeFormat (fmt);              //将新格式应用到光标选区内的字符
791 }
792 
793 //对于所有的QTextDocumet进行的修改都通过QTextCursor类来完成
794 void ImgProcessor::mergeFormat (QTextCharFormat format)
795 {
796     QTextCursor cursor = showWidget->text->textCursor ();   //获得编辑框中的光标
797     //若光标没有高亮区,则光标所在处的词为选区(由前后有空格,“,”,“、”,“."等标点分隔
798     if (!cursor.hasSelection ())
799         cursor.select (QTextCursor::WordUnderCursor);
800     //将format所表示的格式应用到光标所在处的字符上
801     cursor.mergeCharFormat (format);
802     //调用QTextEdit的mergeCurrentCharFormat()将格式应用到选区的所有字符上
803     showWidget->text->mergeCurrentCharFormat (format);
804 }
805 
806 //设置字号
807 void ImgProcessor::ShowSizeSpinBox (QString spinValue)
808 {
809     QTextCharFormat fmt;
810     //设置字号
811     fmt.setFontPointSize (spinValue.toFloat ());
812     //直接调用QTextEdit的
813     showWidget->text->mergeCurrentCharFormat (fmt);
814 }
815 
816 //设置文字显示加粗
817 void ImgProcessor::ShowBoldBtn ()
818 {
819     QTextCharFormat fmt;
820     //设置是否加粗
821     fmt.setFontWeight (boldBtn->isChecked () ? QFont::Bold : QFont::Normal);
822     showWidget->text->mergeCurrentCharFormat (fmt);
823 }
824 
825 //设置文字倾斜
826 void ImgProcessor::ShowItalicBtn ()
827 {
828     QTextCharFormat fmt;
829     //设置是否倾斜 (true or false)
830     fmt.setFontItalic (italicBtn->isChecked() );
831     showWidget->text->mergeCurrentCharFormat (fmt);
832 }
833 
834 //是否下划线
835 void ImgProcessor::ShowUnderlineBtn ()
836 {
837     QTextCharFormat fmt;
838     //设置是否有下划线
839     fmt.setFontUnderline (underlineBtn->isChecked ());
840     showWidget->text->mergeCurrentCharFormat (fmt);
841 }
842 
843 //是否字体颜色
844 void ImgProcessor::ShowColorBtn ()
845 {
846     QColor color = QColorDialog::getColor (Qt::red, this);
847     if (color.isValid ())              //查看颜色是否有效
848     {
849         QTextCharFormat fmt;
850         fmt.setForeground (color);     //设置前景颜色
851         showWidget->text->mergeCurrentCharFormat (fmt);
852     }
853 }
854 
855 //是否背景颜色
856 void ImgProcessor::ShowBackColorBtn()
857 {
858     QColor color = QColorDialog::getColor (Qt::white, this);
859     if (color.isValid ())
860     {
861         QPalette p = showWidget->palette ();
862         p.setColor (QPalette::Base, color);
863         showWidget->setPalette (p);
864     }
865 }
866 
867 //设置字符格式
868 void ImgProcessor::ShowCurrentFormatChanged (const QTextCharFormat &fmt)
869 {
870     //findText()返回(fmt.fontFamily()位置的索引)根据该索引得到ComboBox里面的元素
871     fontComboBox->setCurrentIndex (fontComboBox->findText (fmt.fontFamily ()));
872     sizeComboBox->setCurrentIndex (sizeComboBox->findText (QString::number (fmt.fontPointSize ())));
873     boldBtn->setChecked(fmt.font ().bold ());
874     italicBtn->setChecked (fmt.fontItalic ());
875     underlineBtn->setChecked (fmt.fontUnderline ());
876 }
877 
878 //实现段落对齐
879 void ImgProcessor::ShowAlignment (QAction *act)
880 {
881     if (act == leftAction)
882         showWidget->text->setAlignment (Qt::AlignLeft);
883     if (act == rightAction)
884         showWidget->text->setAlignment (Qt::AlignRight);
885     if (act == centerAction)
886         showWidget->text->setAlignment (Qt::AlignCenter);
887     if (act == justifyAction)
888         showWidget->text->setAlignment (Qt::AlignJustify);
889 }
890 
891 //响应文本中发生改变的信号的函数
892 //完成四个按钮的状态更新,通过调用QTextEdit类的alignment()函数获得当前光标所在段落
893 //的对齐方式,设置相应的对齐按钮为按下状态
894 void ImgProcessor::ShowCursorPositionChanged ()
895 {
896     if (showWidget->text->alignment () == Qt::AlignLeft)
897         leftAction->setChecked (true);
898     if (showWidget->text->alignment () == Qt::AlignRight)
899         rightAction->setChecked (true);
900     if (showWidget->text->alignment () == Qt::AlignCenter)
901         centerAction->setChecked (true);
902     if (showWidget->text->alignment () == Qt::AlignJustify)
903         justifyAction->setChecked (true);
904 
905 }
906 
907 //通过获取当前文本段QTextBlockFormat的缩进值来进行相应的计算的方法,以获得排序文本的缩进值
908 void ImgProcessor::ShowList (int index)
909 {
910     //获得编辑框的QTextCursor对象指针
911     QTextCursor cursor = showWidget->text->textCursor ();
912     if (index != 0)
913     {
914         QTextListFormat::Style style = QTextListFormat::ListDisc;  //初始化style属性值
915         switch(index)
916         {
917         default:
918         //根据索引值来确定style属性值
919         case 1:
920             style = QTextListFormat::ListDisc;       break;
921         case 2:
922             style = QTextListFormat::ListCircle;     break;
923         case 3:
924             style = QTextListFormat::ListSquare;     break;
925         case 4:
926             style = QTextListFormat::ListDecimal;    break;
927         case 5:
928             style = QTextListFormat::ListLowerAlpha; break;
929         case 6:
930             style = QTextListFormat::ListUpperAlpha; break;
931         case 7:
932             style = QTextListFormat::ListLowerRoman; break;
933         case 8:
934             style = QTextListFormat::ListUpperRoman; break;
935         }
936         /* 设置缩进值 */
937         //设定beginEditBlock()和endEditBlock()间的所有操作相当于一个动作
938         cursor.beginEditBlock ();
939         //通过QTextcursor获得QTextBlockFormat对象,由其获得段落的缩进值.
940         QTextBlockFormat blockFmt = cursor.blockFormat ();
941         QTextListFormat  listFmt;
942 
943         //下面的if{...}else {...}代码用来改变段落缩进的长度
944         if (cursor.currentList ())
945         {
946             listFmt = cursor.currentList()->format ();
947         }
948         else
949         {
950             //再通过QTextListFormat定义缩进值
951             listFmt.setIndent (blockFmt.indent() + 1);
952             blockFmt.setIndent (0);
953             cursor.setBlockFormat (blockFmt);
954         }
955         //将设定的格式用到光标所在文本
956 //        qDebug() << "progressing...";
957         listFmt.setStyle (style);
958         cursor.createList (listFmt);
959         cursor.endEditBlock ();
960     }
961     else
962     {
963         QTextBlockFormat bfmt;
964         bfmt.setObjectIndex (-1);
965         cursor.mergeBlockFormat (bfmt);
966     }
967 }
968 
969 ImgProcessor::~ImgProcessor()
970 {
971 
972 }
 1 //showWidget.h
 1 #ifndef SHOWWIDGET_H
 2 #define SHOWWIDGET_H
 3 
 4 #include <QWidget>
 5 #include <QLabel>
 6 #include <QTextEdit>      //文本编辑框
 7 #include <QImage>         //插入图片
 8 
 9 class ShowWidget : public QWidget
10 {
11     Q_OBJECT
12 public:
13     explicit ShowWidget(QWidget *parent = 0);
14     QImage *img;
15     QLabel *imageLabel;
16     QTextEdit *text;
17 
18 signals:
19 
20 public slots:
21 };
22 
23 #endif // SHOWWIDGET_H
 1 //showWidget.cpp
 1 #include "showwidget.h"
 2 #include <QHBoxLayout>
 3 
 4 ShowWidget::ShowWidget(QWidget *parent) : QWidget(parent)
 5 {
 6     imageLabel = new QLabel;
 7     //使图片放置合适位置
 8     imageLabel->setScaledContents (true);
 9 
10     text = new QTextEdit;
11 
12     QHBoxLayout *mainLayout = new QHBoxLayout(this);
13 
14     mainLayout->addWidget (imageLabel);
15     mainLayout->addWidget (text);
16 }
 1 //main.cpp
 2 #include "imgprocessor.h"
 3 #include <QApplication>
 4 #include <QTextCodec>         //使能够输出中文
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     //此语句一定要加上去,qt5中取消了QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk")
 9     //来设置中文字体编码
10     //在读取文件时,才能不会读取中文为乱码
11     QTextCodec::setCodecForLocale (QTextCodec::codecForName ("UTF8"));
12 
13     QApplication a(argc, argv);
14     QFont f("ZYSong18030", 12);
15     a.setFont (f);
16 
17     ImgProcessor w;
18     w.show();
19 
20     return a.exec();
21 }

免责声明:文章转载自《QT_文本编辑器_源码下载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle-cursor动态游标一种memory问题导致的kernel panic的处理方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

vant-picker二次封装

痛点在项目经常会遇到这样的设计,下拉选择框,在vant中没有提供直接的select组件,但是可以使用Field、Popup和Picker这三个组件组合来完成。this.show;}},watch:{selectValue:function{this.result=newVal;},result{this.$emit;}}};效果链接:https://www....

【转载】SecureCRT配色推荐和永久设置

2.配置文件夹和其他颜色选项==“全局选项==”终端==“外观==”ANSI颜色单击第二行中的第五个色块以修改文件夹颜色:对第二个色块执行相同的操作以修改压缩包和jar包的颜色:如果设置后文件夹和其他的颜色无效,您可以对第二行中设置背景色和字体颜色的颜色块执行相同的操作!...

移动端媒体查询的一些尺寸参考

device-width是设备实际的宽度,不会随着屏幕的旋转而改变,因此并不适合开发响应式网站。比如iphone5s的屏幕分辨率宽为640,由于retina显示策略,当scale设置为1的时候,对应的media中取到的width为320,当scale设置为0.5的时候,width为640,而device-width始终是320。总结1.device-widt...

windows 常用命令行操作

目录操作˃pwd打印当前工作目录,通过此关键词可以查看当前所处的路径˃cd更改目录,用于多个目录之间的切换具体输入:cd目录名cd目录名/子目录名(可通过此方式到达最底层的目录)cd~(返回home目录)cd..(返回上一级目录)cd../..(返回上两级目录)cd盘符名:(不同盘符间跳转,cd后面跟上路径则可实现精准跳转)˃mkdir创建目录具体输入:mk...

SqlServer数据库存入decimal类型数据注意事项

对于sqlserver,Decimal可用于存储具有小数点和固定值的值。与浮点和实数不同,十进制用于存储近似值。目的是满足精确数学运算的需要。它是最大和最精确的浮点数字类型。对于十进制类型,请注意必须指定精度;否则,十进制只能存储为整数,就像int一样。例如,十进制是存储长度为18位和小数点后2位的数据。...

海康SDK编程指南(C#二次开发版本)

海康SDK编程指南目前使用的海康SDK包括IPC_SDK,Plat_SDK(平台),其中两套SDK都需单独调用海康播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息。本文仅对视频监控常用功能的使用进行说明,其它未实现功能请参看设备网络SDK使用手册和播放库编程指南V7.2。IPC_SDK编程指南(一)SDK的引用由于IPC_SDK没有SDK安...