1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3
4 MainWindow::MainWindow(QWidget *parent) :
5 QMainWindow(parent),
6 ui(new Ui::MainWindow)
7 {
8
9 ui->setupUi(this);
10 //设置文本编辑器
11 text = new QTextEdit;
12 QFont font;
13 font.setPixelSize(30);
14 text->setFont(font);
15 QColor qcolor;
16 qcolor.setRgb(255,255,255);
17 this->setCentralWidget(text);
18
19 //设置菜单
20 file = this->menuBar()->addMenu("文件");
21 edit = this->menuBar()->addMenu("编辑");
22 build = this->menuBar()->addMenu("构建");
23 about = this->menuBar()->addMenu("关于");
24
25 //about菜单
26 {
27 Aabout_it = new QAction("关于",this);
28 about->addAction(Aabout_it);
29 connect(Aabout_it,SIGNAL(triggered(bool)),this,SLOT(about_it()));
30 }
31
32 //open菜单
33 {
34 Afile_open = new QAction("打开文件",this);
35 file->addAction(Afile_open);
36 connect(Afile_open,SIGNAL(triggered(bool)),this,SLOT(file_open()));
37
38 Afile_close = new QAction("关闭文件",this);
39 file->addAction(Afile_close);
40 connect(Afile_close,SIGNAL(triggered(bool)),this,SLOT(file_close()));
41
42 Afile_save = new QAction("保存文件",this);
43 file->addAction(Afile_save);
44 connect( Afile_save,SIGNAL(triggered(bool)),this,SLOT(file_save()));
45
46 Afile_exit = new QAction("退出",this);
47 file->addAction(Afile_exit);
48 connect(Afile_exit,SIGNAL(triggered(bool)),this,SLOT(file_exit()));
49 }
50
51 //编辑菜单
52 {
53 Afile_selall = new QAction("全选",this);
54 edit->addAction(Afile_selall);
55 connect(Afile_selall,SIGNAL(triggered(bool)),this,SLOT(file_selall()));
56
57 Afile_cut = new QAction("剪切",this);
58 edit->addAction(Afile_cut);
59 connect(Afile_cut,SIGNAL(triggered(bool)),this,SLOT(file_cut()));
60
61 Afile_copy = new QAction("复制",this);
62 edit->addAction(Afile_copy);
63 connect(Afile_copy,SIGNAL(triggered(bool)),this,SLOT(file_copy()));
64
65 Afile_paste = new QAction("粘贴",this);
66 edit->addAction(Afile_paste);
67 connect(Afile_paste,SIGNAL(triggered(bool)),this,SLOT(file_paste()));
68 }
69
70 {
71 Abuild_it = new QAction("编译",this);
72 build->addAction(Abuild_it);
73 connect(Abuild_it,SIGNAL(triggered(bool)),this,SLOT(build_it()));
74
75 Abuild_andrun = new QAction("编译执行",this);
76 build->addAction(Abuild_andrun);
77 connect(Abuild_andrun,SIGNAL(triggered(bool)),this,SLOT(build_andrun()));
78 }
79
80 this->setWindowTitle("简易编译器");
81
82 //showWidget =new ShowWidget(this);
83 // setCentralWidget(showWidget);
84 //在工具栏上嵌入控件
85 //设置字体
86 fontLabel1 =new QLabel(tr("字体:"));
87 fontComboBox =new QFontComboBox;
88 fontComboBox->setFontFilters(QFontComboBox::ScalableFonts);
89
90 fontLabel2 =new QLabel(tr("字号:"));
91 sizeComboBox =new QComboBox;
92 QFontDatabase db;
93 foreach(int size,db.standardSizes())
94 sizeComboBox->addItem(QString::number(size));
95
96 boldBtn =new QToolButton;
97 boldBtn->setIcon(QIcon("bold.png"));
98 boldBtn->setCheckable(true);
99 italicBtn =new QToolButton;
100 italicBtn->setIcon(QIcon("italic.png"));
101 italicBtn->setCheckable(true);
102
103 underlineBtn =new QToolButton;
104 underlineBtn->setIcon(QIcon("underline.png"));
105 underlineBtn->setCheckable(true);
106
107 colorBtn =new QToolButton;
108 colorBtn->setIcon(QIcon("color.png"));
109 colorBtn->setCheckable(true);
110
111 //排序
112 listLabel =new QLabel(tr("排序"));
113 listComboBox =new QComboBox;
114 listComboBox->addItem("Standard");
115 listComboBox->addItem("QTextListFormat::ListDisc");
116 listComboBox->addItem("QTextListFormat::ListCircle");
117 listComboBox->addItem("QTextListFormat::ListSquare");
118 listComboBox->addItem("QTextListFormat::ListDecimal");
119 listComboBox->addItem("QTextListFormat::ListLowerAlpha");
120 listComboBox->addItem("QTextListFormat::ListUpperAlpha");
121 listComboBox->addItem("QTextListFormat::ListLowerRoman");
122 listComboBox->addItem("QTextListFormat::ListUpperRoman");
123
124 createActions();
125 createMenus();
126 createToolBars();
127
128 if(img.load("image.png"))
129 {
130 //showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
131 }
132
133 }
134
135 MainWindow::~MainWindow()
136 {
137 delete ui;
138 }
139
140 void MainWindow::file_open()
141 {
142 filename =QFileDialog::getOpenFileName(this,"hello","*.*");
143 if(filename.isEmpty())
144 {
145 QMessageBox::information(this,"提示","注意选择一个文件");
146 return;
147 }
148 fstream fin(filename.toStdString().c_str());
149 if(!fin)
150 {
151 QMessageBox::information(this,"提示","打开文件失败");
152 return;
153 }
154
155 while(!fin.eof())
156 {
157 char buf[2014]={0};
158 fin.getline(buf,2014);
159 text->append(buf);
160 }
161 fin.close();
162 }
163
164 void MainWindow::file_close()
165 {
166 text->setText("");
167 filename ="";
168 }
169
170 void MainWindow::file_save()
171 {
172 filename = QFileDialog::getSaveFileName();
173 if(filename.isEmpty())
174 {
175 QMessageBox::information(this,"提示","打开文件失败");
176 return;
177 }
178
179 QString info =text->toPlainText().toStdString().c_str();
180 //写入
181 ofstream fout(filename.toStdString().c_str());
182 if(!fout)
183 {
184 QMessageBox::information(this,"提示","打开文件失败");
185 return;
186 }
187 fout.write(info.toStdString().c_str(),strlen(info.toStdString().c_str()));
188 fout.close();
189 }
190
191 void MainWindow::file_exit()
192 {
193 exit(0);
194 }
195
196 void MainWindow::file_selall()
197 {
198 text->selectAll();
199 }
200
201 void MainWindow::file_cut()
202 {
203 text->cut();
204 }
205
206 void MainWindow::file_copy()
207 {
208 text->copy();
209 }
210
211 void MainWindow::file_paste()
212 {
213 text->paste();
214 }
215
216 void MainWindow::build_it()
217 {
218 QString destexename = filename;
219 bool iscpp = destexename.contains(".cpp");
220 QString cmd;
221 if(iscpp)
222 {
223 destexename.replace(".cpp",".exe");
224 cmd = "g++ -o " + destexename+" " +filename;
225 }
226 else
227 {
228 destexename.replace(".c",".exe");
229 cmd = "gcc -o "+destexename+" "+filename;
230 }
231 system(cmd.toStdString().c_str());
232 }
233
234 void MainWindow::build_andrun()
235 {
236 QString destexename = filename;
237 bool iscpp = destexename.contains(".cpp");
238 QString cmd;
239 if(iscpp)
240 {
241 destexename.replace(".cpp",".exe");
242 cmd = "g++ -o "+filename+" "+destexename;
243 }
244 else
245 {
246 destexename.replace(".c",".exe");
247 cmd = "gcc -o "+filename+" "+destexename;
248 }
249 system(cmd.toStdString().c_str());
250
251 system(destexename.toStdString().c_str());
252 }
253
254 void MainWindow::about_it()
255 {
256 QMessageBox::information(this,"hello","版权所有,盗版不究");
257 }
258
259 void MainWindow::createActions()
260 {
261 //"打开"动作
262 openFileAction =new QAction(QIcon("open.png"),tr("打开"),this);
263 openFileAction->setShortcut(tr("Ctrl+O"));
264 openFileAction->setStatusTip(tr("打开一个文件"));
265 // connect(openFileAction,SIGNAL(triggered()),this,SLOT(ShowOpenFile()));
266
267 //"新建"动作
268 NewFileAction =new QAction(QIcon("new.png"),tr("新建"),this);
269 NewFileAction->setShortcut(tr("Ctrl+N"));
270 NewFileAction->setStatusTip(tr("新建一个文件"));
271 //connect(NewFileAction,SIGNAL(triggered()),this,SLOT(ShowNewFile()));
272
273 //"退出"动作
274 exitAction =new QAction(tr("退出"),this);
275 exitAction->setShortcut(tr("Ctrl+Q"));
276 exitAction->setStatusTip(tr("退出程序"));
277 //connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));
278
279 //"复制"动作
280 copyAction =new QAction(QIcon("copy.png"),tr("复制"),this);
281 copyAction->setShortcut(tr("Ctrl+C"));
282 copyAction->setStatusTip(tr("复制文件"));
283 // connect(copyAction,SIGNAL(triggered()),showWidget->text,SLOT(copy()));
284
285 //"剪切"动作
286 cutAction =new QAction(QIcon("cut.png"),tr("剪切"),this);
287 cutAction->setShortcut(tr("Ctrl+X"));
288 cutAction->setStatusTip(tr("剪切文件"));
289 //connect(cutAction,SIGNAL(triggered()),showWidget->text,SLOT(cut()));
290
291 //"粘贴"动作
292 pasteAction =new QAction(QIcon("paste.png"),tr("粘贴"),this);
293 pasteAction->setShortcut(tr("Ctrl+V"));
294 pasteAction->setStatusTip(tr("粘贴文件"));
295 // connect(pasteAction,SIGNAL(triggered()),showWidget->text,SLOT(paste()));
296
297 //"关于"动作
298 aboutAction =new QAction(tr("关于"),this);
299 // connect(aboutAction,SIGNAL(triggered()),this,SLOT(QApplication::aboutQt()));
300
301 //"打印文本"动作
302 PrintTextAction =new QAction(QIcon("printText.png"),tr("打印文本"), this);
303 PrintTextAction->setStatusTip(tr("打印一个文本"));
304 // connect(PrintTextAction,SIGNAL(triggered()),this,SLOT(ShowPrintText()));
305
306 //"打印图像"动作
307 PrintImageAction =new QAction(QIcon("printImage.png"),tr("打印图像"), this);
308 PrintImageAction->setStatusTip(tr("打印一幅图像"));
309 // connect(PrintImageAction,SIGNAL(triggered()),this,SLOT(ShowPrintImage()));
310
311 //"放大"动作
312 zoomInAction =new QAction(QIcon("zoomin.png"),tr("放大"),this);
313 zoomInAction->setStatusTip(tr("放大一张图片"));
314 // connect(zoomInAction,SIGNAL(triggered()),this,SLOT(ShowZoomIn()));
315
316 //"缩小"动作
317 zoomOutAction =new QAction(QIcon("zoomout.png"),tr("缩小"),this);
318 zoomOutAction->setStatusTip(tr("缩小一张图片"));
319 // connect(zoomOutAction,SIGNAL(triggered()),this,SLOT(ShowZoomOut()));
320
321 //实现图像旋转的动作(Action)
322 //旋转90°
323 rotate90Action =new QAction(QIcon("rotate90.png"),tr("旋转90°"),this);
324 rotate90Action->setStatusTip(tr("将一幅图旋转90°"));
325 // connect(rotate90Action,SIGNAL(triggered()),this,SLOT(ShowRotate90()));
326
327 //旋转180°
328 rotate180Action =new QAction(QIcon("rotate180.png"),tr("旋转180°"), this);
329 rotate180Action->setStatusTip(tr("将一幅图旋转180°"));
330 connect(rotate180Action,SIGNAL(triggered()),this,SLOT(ShowRotate180()));
331
332 //旋转270°
333 rotate270Action =new QAction(QIcon("rotate270.png"),tr("旋转270°"), this);
334 rotate270Action->setStatusTip(tr("将一幅图旋转270°"));
335 // connect(rotate270Action,SIGNAL(triggered()),this,SLOT(ShowRotate270()));
336
337 //实现图像镜像的动作(Action)
338 //纵向镜像
339 mirrorVerticalAction =new QAction(tr ("纵向镜像"),this);
340 mirrorVerticalAction->setStatusTip(tr("对一张图作纵向镜像"));
341 // connect(mirrorVerticalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorVertical()));
342
343 //横向镜像
344 mirrorHorizontalAction =new QAction(tr("横向镜像"),this);
345 mirrorHorizontalAction->setStatusTip(tr("对一张图作横向镜像"));
346 //connect(mirrorHorizontalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorHorizontal()));
347
348 //排序:左对齐、右对齐、居中和两端对齐
349 actGrp =new QActionGroup(this);
350
351 leftAction =new QAction(QIcon("left.png"),"左对齐",actGrp);
352 leftAction->setCheckable(true);
353
354 rightAction =new QAction(QIcon("right.png"),"右对齐",actGrp);
355 rightAction->setCheckable(true);
356
357 centerAction =new QAction(QIcon("center.png"),"居中",actGrp);
358 centerAction->setCheckable(true);
359
360 justifyAction =new QAction(QIcon("justify.png"),"两端对齐",actGrp);
361 justifyAction->setCheckable(true);
362
363 // connect(actGrp,SIGNAL(triggered(QAction*)),this,SLOT(ShowAlignment(QAction*)));
364
365 //实现撤销和重做的动作(Action)
366 //撤销和重做
367 undoAction =new QAction(QIcon("undo.png"),"撤销",this);
368 // connect(undoAction,SIGNAL(triggered()),showWidget->text,SLOT(undo()));
369 redoAction =new QAction(QIcon("redo.png"),"重做",this);
370 //connect(redoAction,SIGNAL(triggered()),showWidget->text,SLOT(redo()));
371 }
372
373 void MainWindow::createMenus()
374 {
375 //文件菜单
376 fileMenu =menuBar()->addMenu(tr("文件"));
377 fileMenu->addAction(openFileAction);
378 fileMenu->addAction(NewFileAction);
379 fileMenu->addAction(PrintTextAction);
380 fileMenu->addAction(PrintImageAction);
381 fileMenu->addSeparator();
382 fileMenu->addAction(exitAction);
383
384 //缩放菜单
385 zoomMenu =menuBar()->addMenu(tr("编辑"));
386 zoomMenu->addAction(copyAction);
387 zoomMenu->addAction(cutAction);
388 zoomMenu->addAction(pasteAction);
389 zoomMenu->addAction(aboutAction);
390 zoomMenu->addSeparator();
391 zoomMenu->addAction(zoomInAction);
392 zoomMenu->addAction(zoomOutAction);
393
394 //旋转菜单
395 rotateMenu =menuBar()->addMenu(tr("旋转"));
396 rotateMenu->addAction(rotate90Action);
397 rotateMenu->addAction(rotate180Action);
398 rotateMenu->addAction(rotate270Action);
399
400 //镜像菜单
401 mirrorMenu =menuBar()->addMenu(tr("镜像"));
402 mirrorMenu->addAction(mirrorVerticalAction);
403 mirrorMenu->addAction(mirrorHorizontalAction);
404 }
405
406 void MainWindow::createToolBars()
407 {
408 //文件工具条
409 fileTool =addToolBar("File");
410 fileTool->addAction(openFileAction);
411 fileTool->addAction(NewFileAction);
412 fileTool->addAction(PrintTextAction);
413 fileTool->addAction(PrintImageAction);
414
415 //编辑工具条
416 zoomTool =addToolBar("Edit");
417 zoomTool->addAction(copyAction);
418 zoomTool->addAction(cutAction);
419 zoomTool->addAction(pasteAction);
420 zoomTool->addSeparator();
421 zoomTool->addAction(zoomInAction);
422 zoomTool->addAction(zoomOutAction);
423
424 //旋转工具条
425 rotateTool =addToolBar("rotate");
426 rotateTool->addAction(rotate90Action);
427 rotateTool->addAction(rotate180Action);
428 rotateTool->addAction(rotate270Action);
429
430 //撤销和重做工具条
431 doToolBar =addToolBar("doEdit");
432 doToolBar->addAction(undoAction);
433 doToolBar->addAction(redoAction);
434
435 //字体工具条
436 fontToolBar =addToolBar("Font");
437 fontToolBar->addWidget(fontLabel1);
438 fontToolBar->addWidget(fontComboBox);
439 fontToolBar->addWidget(fontLabel2);
440 fontToolBar->addWidget(sizeComboBox);
441 fontToolBar->addSeparator();
442 fontToolBar->addWidget(boldBtn);
443 fontToolBar->addWidget(italicBtn);
444 fontToolBar->addWidget(underlineBtn);
445 fontToolBar->addSeparator();
446 fontToolBar->addWidget(colorBtn);
447
448 //排序工具条
449 listToolBar =addToolBar("list");
450 listToolBar->addWidget(listLabel);
451 listToolBar->addWidget(listComboBox);
452 listToolBar->addSeparator();
453 listToolBar->addActions(actGrp->actions());
454 }