如果有需要了解功能实现细节可到( https://github.com/ihatetheworld7/sconance/tree/master/文本编辑器 ) 查看完整代码
界面如下
(一)窗体内容显示区域设计
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);
}
(二)菜单设计
void ImageProcessor::createMenus()
{
fileMenu=menuBar()->addMenu("文件");
fileMenu->addAction(openFileAction);
fileMenu->addAction(newFileAction);
fileMenu->addAction(printTextAction);
fileMenu->addAction(printImageAction);
fileMenu->addSeparator();
fileMenu->addAction(exitAction);
zoomMenu=menuBar()->addMenu("编辑");
zoomMenu->addAction(copyAction);
zoomMenu->addAction(cutAction);
zoomMenu->addAction(pasteAction);
zoomMenu->addAction(aboutAction);
zoomMenu->addSeparator();
zoomMenu->addAction(zoomInAction);
zoomMenu->addAction(zoomOutAction);
rotateMenu=menuBar()->addMenu("旋转");
rotateMenu->addAction(rotate90Action);
rotateMenu->addAction(rotate180Action);
rotateMenu->addAction(rotate270Action);
mirrorMenu=menuBar()->addMenu("镜像");
mirrorMenu->addAction(mirroVertiacalAction);
mirrorMenu->addAction(mirroHorizontalAction);
}
(三)工具栏设计
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->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);
fontToolBar=addToolBar("Font");
fontToolBar->addWidget(fontLabel1);
fontToolBar->addWidget(fontComboBox);
fontToolBar->addWidget(fontLabel2);
fontToolBar->addWidget(sizeComboBox);
fontToolBar->addSeparator();
fontToolBar->addWidget(boldBtn);
fontToolBar->addWidget(italicBtn);
fontToolBar->addWidget(underlineBtn);
fontToolBar->addSeparator();
fontToolBar->addWidget(colorBtn);
listToolBar=addToolBar("list");
listToolBar->addWidget(listLabel);
listToolBar->addWidget(listComboBox);
listToolBar->addSeparator();
listToolBar->addActions(actGrp->actions());
}
(四)菜单和工具栏中的功能
openFileAction = new QAction(QIcon("D:\\Image\\打开文件.png"),("打开"),this);
openFileAction->setShortcut(tr("Ctrl+O"));
openFileAction->setStatusTip("打开一个文件");
newFileAction=new QAction(QIcon("D:\\Image\\新建文件.png"),("新建"),this);
newFileAction->setShortcut(tr("Ctrl+N"));
newFileAction->setStatusTip("新建一个文件");
exitAction=new QAction(("退出"),this);
exitAction->setShortcut(tr("Ctrl+Q"));
exitAction->setStatusTip("退出程序");
connect(exitAction,&QAction::triggered,this,&ImageProcessor::close);
copyAction=new QAction(QIcon("D:\\Image\\复制文件.png"),("复制"),this);
copyAction->setShortcut(tr("Ctrl+C"));
copyAction->setStatusTip("复制文件");
connect(copyAction,&QAction::triggered, showWidget->text,&QTextEdit::close);
...
对于功能的实现这里就给出部分代码
打印文件和打印图片
//打印文件
connect(printTextAction,&QAction::triggered,[=](){
QPrinter painter;
QPrintDialog printDialog(&painter,this);
if(printDialog.exec())
{
QTextDocument *doc=showWidget->text->document();
doc->print(&painter);
}
});
//打印图片
connect(printImageAction,&QAction::triggered,[=](){
QPrinter printer;
QPrintDialog printDialog(&printer,this);
if(printDialog.exec())
{
QPainter painter(&printer);
QRect rect=painter.viewport();
QSize size=img.size();
painter.setViewport(rect.x(),rect.y(),size.width(),size.height());
painter.setWindow(img.rect());
painter.drawImage(0,0,img);
}
});
旋转90°
connect(rotate90Action,&QAction::triggered,[=](){
if(img.isNull())
return;
QMatrix matrix;
matrix.rotate(90);
img=img.transformed(matrix);
showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
});
设置字体颜色
QColor color=QColorDialog::getColor(Qt::red,this);
if(color.isValid())
{
QTextCharFormat fmt;
fmt.setForeground(color);
showWidget->text->mergeCurrentCharFormat(fmt);
}
设置字体加粗
QTextCharFormat fmt;
fmt.setFontWeight(boldBtn->isChecked()?QFont::Bold:QFont::Normal);
showWidget->text->mergeCurrentCharFormat(fmt);