showwidget.h
/** * 书本:【Qt5开发及实例】 * 功能:实现一个简单的文本编辑器 * 文件:showwidget.h * 时间:2015年1月18日10:03:21 * 作者:cutter_point */ #ifndef SHOWWIDGET_H #define SHOWWIDGET_H #include <QWidget> #include <QLabel> #include <QTextEdit> #include <QImage> class ShowWidget : public QWidget { Q_OBJECT public: explicit ShowWidget(QWidget *parent = 0); QImage img; QLabel *imageLabel; QTextEdit *text; signals: public slots: }; #endif // SHOWWIDGET_H
/** * 书本:【Qt5开发及实例】 * 功能:实现一个简单的文本编辑器 * 文件:showwidget.h * 时间:2015年1月18日10:03:21 * 作者:cutter_point */ #include "showwidget.h" #include <QHBoxLayout> ShowWidget::ShowWidget(QWidget *parent) : QWidget(parent) { imageLabel = new QLabel; imageLabel->setScaledContents(true); text = new QTextEdit; QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->addWidget(imageLabel); mainLayout->addWidget(text); }
/** * 书本:【Qt5开发及实例】 * 功能:实现一个简单的文本编辑器 * 文件:showwidget.h * 时间:2015年1月18日10:41:52 * 作者:cutter_point */ #ifndef IMAGEPROCESSOR_H #define IMAGEPROCESSOR_H #include <QMainWindow> #include <QImage> #include <QLabel> #include <QMenu> #include <QMenuBar> #include <QAction> #include <QComboBox> #include <QSpinBox> #include <QToolBar> #include <QFontComboBox> #include <QToolButton> #include <QTextCharFormat> #include "showwidget.h" class ImageProcessor : public QMainWindow { Q_OBJECT public: ImageProcessor(QWidget *parent = 0); ~ImageProcessor(); //创建动作 void createActions(); //创建菜单 void createMenus(); //创建工具栏 void createToolBars(); void loadFile(QString filename); //加载文件 void mergeFormat(QTextCharFormat); //文本格式 private: //各项菜单栏 QMenu *fileMenu; QMenu *zoomMenu; QMenu *rotateMenu; QMenu *mirrorMenu; QImage img; //图片 QString fileName; //文件名 ShowWidget *showWidget; //显示流 //文件菜单项 QAction *openFileAction; QAction *NewFileAction; QAction *PrintTextAction; QAction *PrintImageAction; QAction *exitAction; //编辑菜单项 QAction *copyAction; QAction *cutAction; QAction *pasteAction; QAction *aboutAction; QAction *zoomInAction; QAction *zoomOutAction; //旋转菜单项 QAction *rotate90Action; QAction *rotate180Action; QAction *rotate270Action; //镜像菜单项 QAction *mirrorVerticalAction; QAction *mirrorHorizontalAction; QAction *undoAction; QAction *redoAction; //工具栏 QToolBar *fileTool; QToolBar *zoomTool; QToolBar *rotateTool; QToolBar *mirrorTool; QToolBar *doToolBar; protected slots: //添加函数槽 void ShowNewFile(); //新建一个新的文件 void ShowOpenFile(); //打开文件 void ShowPrintText(); //打印功能的实现 void ShowPrintImage(); //打印图片 }; #endif // IMAGEPROCESSOR_H
/** * 书本:【Qt5开发及实例】 * 功能:实现一个简单的文本编辑器 * 文件:showwidget.h * 时间:2015年1月18日10:41:52 * 作者:cutter_point */ #include "imageprocessor.h" #include <QApplication> #include <QDebug> #include <QFileDialog> #include <QFile> #include <QTextStream> //#include <QPrintDialog> #include <QtPrintSupport/QPrintDialog> #include <QtPrintSupport/QPrinter> #include <QPainter> ImageProcessor::ImageProcessor(QWidget *parent) : QMainWindow(parent) { //首先设定标题 setWindowTitle(tr("my word")); //创建放图像的label和文本输入的地方,把这个设置为中心部件 showWidget = new ShowWidget(this); //创建一个对象 setCentralWidget(showWidget); //把这个设置为中心部件 // qDebug()<<"11111111111111"; createActions(); //创建动作 // qDebug()<<"222222222222222222"; createMenus(); //创建菜单 // qDebug()<<"3333333333333333"; createToolBars(); //工具 // qDebug()<<"......"; //如果图像加载成功 if(img.load(":/image.png")) { //在imageLabel中放图像 showWidget->imageLabel->setPixmap(QPixmap::fromImage(img)); } } //工具栏的实现 void ImageProcessor::createToolBars() { //文件工具条 fileTool = addToolBar("File"); fileTool->addAction(openFileAction); fileTool->addAction(NewFileAction); fileTool->addAction(PrintTextAction); fileTool->addAction(PrintImageAction); //编辑工具条 zoomTool = addToolBar("Edit"); zoomTool->addAction(copyAction); zoomTool->addAction(cutAction); zoomTool->addAction(pasteAction); // zoomTool->addAction(aboutAction); zoomTool->addSeparator(); //分隔符 zoomTool->addAction(zoomInAction); zoomTool->addAction(zoomOutAction); //旋转工具 rotateTool = addToolBar("rotate"); rotateTool->addAction(rotate90Action); rotateTool->addAction(rotate180Action); rotateTool->addAction(rotate270Action); //撤销和重做 doToolBar = addToolBar("doEdit"); doToolBar->addAction(undoAction); doToolBar->addAction(redoAction); fileTool->setAllowedAreas(Qt::TopToolBarArea|Qt::LeftToolBarArea); } //菜单的实现 void ImageProcessor::createMenus() { //文件菜单 fileMenu = menuBar()->addMenu(tr("file")); fileMenu->addAction(openFileAction); fileMenu->addAction(NewFileAction); fileMenu->addAction(PrintTextAction); fileMenu->addAction(PrintImageAction); fileMenu->addSeparator(); //分隔符 fileMenu->addAction(exitAction); //缩放菜单 zoomMenu = menuBar()->addMenu(tr("zoom")); //缩放 zoomMenu->addAction(copyAction); zoomMenu->addAction(cutAction); zoomMenu->addAction(pasteAction); zoomMenu->addAction(aboutAction); zoomMenu->addSeparator(); //分隔符 zoomMenu->addAction(zoomInAction); zoomMenu->addAction(zoomOutAction); //旋转菜单 rotateMenu = menuBar()->addMenu(tr("rotate")); rotateMenu->addAction(rotate90Action); rotateMenu->addAction(rotate180Action); rotateMenu->addAction(rotate270Action); //镜像菜单 mirrorMenu = menuBar()->addMenu(tr("mirror")); mirrorMenu->addAction(mirrorVerticalAction); mirrorMenu->addAction(mirrorHorizontalAction); } //动作的实现 void ImageProcessor::createActions() { //打开动作 // qDebug()<<"11111111111111"; openFileAction = new QAction(QIcon(":/open.png"), tr("open"), this); //设置图片,名字 openFileAction->setShortcut(tr("Ctrl+O")); //设置快捷键 openFileAction->setStatusTip(tr("open a file")); //设置提示 // qDebug()<<"222222222222222222"; // connect(NewFileAction, SIGNAL(triggered()), this, SLOT(ShowNewFile())); //连接上相应的槽 connect(openFileAction, SIGNAL(triggered()), this, SLOT(ShowOpenFile())); //新建动作 NewFileAction = new QAction(QIcon(":/new.png"), tr("new"), this); //设置图片,名字 NewFileAction->setShortcut(tr("Ctrl+N")); //设置快捷键 NewFileAction->setStatusTip(tr("new a file")); //设置提示 connect(NewFileAction, SIGNAL(triggered()), this, SLOT(ShowNewFile())); //连接上相应的槽 //退出动作 exitAction = new QAction(tr("out"), this); //设置图片,名字 exitAction->setShortcut(tr("Ctrl+Q")); //设置快捷键 exitAction->setStatusTip(tr("close")); //设置提示 connect(exitAction, SIGNAL(triggered()), this, SLOT(close())); //复制 copyAction = new QAction(QIcon(":/copy.png"), tr("out"), this); //设置图片,名字 copyAction->setShortcut(tr("Ctrl+C")); //设置快捷键 copyAction->setStatusTip(tr("copy file")); //设置提示 connect(copyAction, SIGNAL(triggered()), showWidget->text, SLOT(copy())); //剪切 cutAction = new QAction(QIcon(":/cut.png"), tr("cut"), this); //设置图片,名字 cutAction->setShortcut(tr("Ctrl+X")); //设置快捷键 cutAction->setStatusTip(tr("cut file")); //设置提示 connect(copyAction, SIGNAL(triggered()), showWidget->text, SLOT(cut())); //粘贴 pasteAction = new QAction(QIcon(":/paste.png"), tr("paste"), this); //设置图片,名字 pasteAction->setShortcut(tr("Ctrl+V")); //设置快捷键 pasteAction->setStatusTip(tr("paste file")); //设置提示 connect(copyAction, SIGNAL(triggered()), showWidget->text, SLOT(paste())); //关于 // QApplication *app; aboutAction = new QAction(tr("about"), this); connect(aboutAction, SIGNAL(triggered()), this, SLOT(QApplication::aboutQt())); //打印文本 PrintTextAction = new QAction(QIcon(":/printText.png"), tr("printtext"), this); PrintTextAction->setStatusTip(tr("print a text")); connect(PrintTextAction, SIGNAL(triggered()), this, SLOT(ShowPrintText())); //连接相应的动作 //打印图像 PrintImageAction = new QAction(QIcon(":/printImage.png"), tr("printImage"), this); PrintImageAction->setStatusTip(tr("print a image")); connect(PrintImageAction, SIGNAL(triggered()), this, SLOT(ShowPrintImage())); //放大图像 zoomInAction = new QAction(QIcon(":/zoomin.png"), tr("get big"), this); zoomInAction->setStatusTip(tr("get big image")); //缩小 zoomOutAction = new QAction(QIcon(":/zoomout.png"), tr("get small"), this); zoomOutAction->setStatusTip(tr("get small image")); //实现图片的选择动作 //旋转90° rotate90Action = new QAction(QIcon(":/rotate90.png"), tr("get rotate90"), this); rotate90Action->setStatusTip(tr("get rotate90 image")); //180° rotate180Action = new QAction(QIcon(":/rotate180.png"), tr("get rotate180"), this); rotate180Action->setStatusTip(tr("get rotate180 image")); //270° rotate270Action = new QAction(QIcon(":/rotate270.png"), tr("get rotate270"), this); rotate270Action->setStatusTip(tr("get rotate270 image")); //实现图像镜像的动作 //纵向 mirrorVerticalAction = new QAction(QIcon("mirrorVertical.png"), tr("mirrorVertical"), this); mirrorVerticalAction->setStatusTip(tr("mirrorVertical the image")); //横向 mirrorHorizontalAction = new QAction(QIcon("mirrorHorizontal.png"), tr("mirrorHorizontal"), this); mirrorHorizontalAction->setStatusTip(tr("mirrorHorizontal the image")); //实现撤销和恢复的动作 //撤销和恢复 undoAction = new QAction(QIcon(":/undo.png"), "undo", this); //撤销 connect(undoAction, SIGNAL(triggered()), showWidget->text, SLOT(undo())); redoAction = new QAction(QIcon(":/redo.png"), "redo", this); //重做 connect(undoAction, SIGNAL(triggered()), showWidget->text, SLOT(redo())); } //实现打印图像功能的函数 void ImageProcessor::ShowPrintImage() { QPrinter printer; QPrintDialog printDialog(&printer, this); //是否点击确定 if(printDialog.exec()) { QPainter painter(&printer); QRect rect = painter.viewport(); //获得QPainter对象的视角矩形区域 QSize size = img.size(); //图片的尺寸 size.scale(rect.size(), Qt::KeepAspectRatio); painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); //设置矩形区域 painter.drawImage(0, 0, img); } } //实现打印文本功能 void ImageProcessor::ShowPrintText() { // QP QPrinter printer; //打印 QPrintDialog printDialog(&printer, this); if(printDialog.exec()) //是否点击确定 { QTextDocument *doc = showWidget->text->document(); //得到文档对象 doc->print(&printer); //开始打印 } } //打开文件 void ImageProcessor::ShowOpenFile() { fileName = QFileDialog::getOpenFileName(this); //得到文件名 if(!fileName.isEmpty()) //文件不为空 { if(showWidget->text->document()->isEmpty()) //中心部件的内容的根节点不是空 { loadFile(fileName); //添加文件 } else { ImageProcessor *newImageProcessor = new ImageProcessor; //创建一个新的my word文档 newImageProcessor->show(); //显示出来 newImageProcessor->loadFile(fileName); //添加文件 } } } //实现loadFile函数,这个文件的处理后面会再次进行学习 void ImageProcessor::loadFile(QString filename) { printf("file name:%s\n", filename.data()); //输出文件名 QFile file(filename); if(file.open(QIODevice::ReadOnly|QIODevice::Text)) { QTextStream textStream(&file); while(!textStream.atEnd()) //循环到后面 { showWidget->text->append(textStream.readLine()); //给文档添加文件 printf("read line\n"); } printf("end\n"); } } //新建文件槽 void ImageProcessor::ShowNewFile() { // qDebug()<<"????"; ImageProcessor *newImageProcessor = new ImageProcessor; newImageProcessor->show(); //一个新的文档显示 } ImageProcessor::~ImageProcessor() { }
#include "imageprocessor.h" #include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); ImageProcessor w; w.show(); return a.exec(); }
#------------------------------------------------- # # Project created by QtCreator 2015-01-18T10:01:31 # #------------------------------------------------- QT += core gui QT += printsupport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = ImageProcessor TEMPLATE = app SOURCES += main.cpp imageprocessor.cpp showwidget.cpp HEADERS += imageprocessor.h showwidget.h RESOURCES += images.qrc
哎 考完试了,应该可以正常点了,现在还在慢慢调整中。
不过最近LPL联赛真的很有意思啊!!!!有木有!!!支持OMG
原文:http://blog.csdn.net/cutter_point/article/details/42839071