#include "mainwindow.h"
#include <QStatusBar>
#include <QActionGroup>
#include <QMessageBox>
#include <QColorDialog>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) {
setStyleSheet("background-color: white;");
currentColor=Qt::black;
setWindowTitle(tr("简单绘图程序 未命名"));
centerWidget=new CenterWidget(this);
setCentralWidget(centerWidget);
fileMenu=menuBar()->addMenu(tr("文件"));
newAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\new.png"),tr("新建"),this);
newAction->setShortcut(tr("Ctrl+N"));
newAction->setStatusTip(tr("新建绘图文件"));
openAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\open.png"),tr("打开"),this);
openAction->setShortcut(tr("Ctrl+O"));
openAction->setStatusTip(tr("打开保存的绘图文件"));
saveAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\save.png"),tr("保存"),this);
saveAction->setShortcut(tr("Ctrl+S"));
saveAction->setStatusTip(tr("保存当前绘图文件"));
exitAction=new QAction(tr("退出"),this);
exitAction->setShortcut(tr("Ctrl+X"));
exitAction->setStatusTip(tr("退出程序"));
fileMenu->addAction(newAction);
fileMenu->addAction(openAction);
fileMenu->addAction(saveAction);
fileMenu->addSeparator();
fileMenu->addAction(exitAction);
lineAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\line.png"),tr("线条"),this);
lineAction->setShortcut(tr("Ctrl+L"));
lineAction->setStatusTip(tr("绘制线条"));
ellipseAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\ellipse.png"),tr("椭圆"),this);
ellipseAction->setShortcut(tr("Ctrl+E"));
ellipseAction->setStatusTip(tr("绘制椭圆"));
rectangleAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\rectangle.png"),tr("矩形"),this);
rectangleAction->setShortcut(tr("Ctrl+R"));
rectangleAction->setStatusTip(tr("绘制矩形"));
pointAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\point.png"),tr("点"),this);
pointAction->setShortcut(tr("Ctrl+P"));
pointAction->setStatusTip(tr("绘制点"));
undoAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\undo.png"),tr("撤销"),this);
undoAction->setShortcut(tr("Ctrl+Z"));
undoAction->setStatusTip(tr("撤销"));
redoAction=new QAction(QIcon("D:\\gitcode\\SimpleDraw\\SimpleDraw_19_1\\res\\redo.png"),tr("重做"),this);
redoAction->setShortcut(tr("Ctrl+Y"));
redoAction->setStatusTip(tr("重做"));
drawMenu= menuBar()->addMenu(tr("绘图"));
lineAction->setCheckable(true);
ellipseAction->setCheckable(true);
rectangleAction->setCheckable(true);
pointAction->setCheckable(true);
QActionGroup *group=new QActionGroup(this);
group->addAction(lineAction);
group->addAction(ellipseAction);
group->addAction(rectangleAction);
group->addAction(pointAction);
drawMenu->addAction(lineAction);
drawMenu->addAction(ellipseAction);
drawMenu->addAction(rectangleAction);
drawMenu->addAction(pointAction);
drawMenu->addSeparator();
drawMenu->addAction(undoAction);
drawMenu->addAction(redoAction);
group->setExclusive (true);
lineAction->setChecked(true);
QMenu* colorMenu=new QMenu(tr("画笔颜色"),this);
QAction* setColorAction=new QAction(tr("设置颜色"),this);
colorMenu->addAction(setColorAction);
menuBar()->addMenu(colorMenu);
//颜色预览
QAction* ColorAction=new QAction(tr(""),this);
colorToolBar=addToolBar(tr("color"));
ColorAction->setStatusTip(tr("当前颜色"));
colorToolBar->addAction(ColorAction);
QPixmap pixmap(20,20);
pixmap.fill(currentColor);
colorToolBar->actions().first()->setIcon(QIcon(pixmap));
drawToolBar=addToolBar(tr("Draw"));
drawToolBar->addAction(newAction);
drawToolBar->addAction(openAction);
drawToolBar->addAction(saveAction);
drawToolBar->addSeparator();
drawToolBar->addAction(lineAction);
drawToolBar->addAction(ellipseAction);
drawToolBar->addAction(rectangleAction);
drawToolBar->addAction(pointAction);
//线宽设置
QSlider* lineWidthSlider=new QSlider(Qt::Horizontal);
lineWidthSlider->setFixedWidth(300);
lineWidthSlider->setRange(1,20);
lineWidthSlider->setSingleStep(1);
lineWidthSlider->setValue(3);
lineWidthSlider->setToolTip(tr("线条宽度"));
lineWidthSlider->setTracking(true);
connect(lineWidthSlider,SIGNAL(valueChanged(int)),this,SLOT(setLineWidth(int)));
QSpinBox *lineWidthBox=new QSpinBox(this);
lineWidthBox->setRange(1,20);
lineWidthBox->setSingleStep(1);
lineWidthBox->setValue(3);
lineWidthBox->setSingleStep(1);
lineWidthSlider->setTracking(true);
connect(lineWidthBox,SIGNAL(valueChanged(int)),this,SLOT(setLineWidth(int)));
connect(lineWidthSlider,SIGNAL(valueChanged(int)),lineWidthBox,SLOT(setValue(int)));
connect(lineWidthBox,SIGNAL(valueChanged(int)),lineWidthSlider,SLOT(setValue(int)));
drawToolBar->addSeparator();
drawToolBar->addWidget(lineWidthBox);
drawToolBar->addWidget(lineWidthSlider);
connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));
connect(lineAction,SIGNAL(triggered()),this,SLOT(line()));
connect(ellipseAction,SIGNAL(triggered()),this,SLOT(ellipse()));
connect(rectangleAction,SIGNAL(triggered()),this,SLOT(rectangle()));
connect(pointAction,SIGNAL(triggered()),this,SLOT(point()));
connect(newAction,SIGNAL(triggered()),this,SLOT(newDrawing()));
connect(openAction,SIGNAL(triggered()),this,SLOT(openDrawing()));
connect(saveAction,SIGNAL(triggered()),this,SLOT(saveDrawing()));
connect(setColorAction,SIGNAL(triggered()),this,SLOT(setColor()));
connect(ColorAction,SIGNAL(triggered()),this,SLOT(setColor()));
connect(undoAction,SIGNAL(triggered()),this,SLOT(undo()));
connect(redoAction,SIGNAL(triggered()),this,SLOT(redo()));
centerWidget->setDrawType(0);
statusBar()->show();
}
MainWindow::~MainWindow() {
}
void MainWindow::line() {
centerWidget->setDrawType(0);
}
void MainWindow::ellipse() {
centerWidget->setDrawType(1);
}
void MainWindow::rectangle() {
centerWidget->setDrawType(2);
}
void MainWindow::point() {
centerWidget->setDrawType(3);
}
void MainWindow::setColor(){
QColorDialog colorDialog(this);
colorDialog.setCurrentColor(currentColor);
if(colorDialog.exec()==QDialog::Accepted){
currentColor=colorDialog.selectedColor();
centerWidget->setCurrentColor(currentColor);
}
QPixmap pixmap(16,16);
pixmap.fill(currentColor);
colorToolBar->actions().first()->setIcon(QIcon(pixmap));
}
void MainWindow::setLineWidth(int value){
centerWidget->setLineWidth(value);
//lineWidthBox->setValue(value);
//lineWidthSlider->setValue(value);
}
void MainWindow::newDrawing() {
if(centerWidget->getModifiedFlag()==true) { //文档已修改
switch(QMessageBox::question(this,tr("文档保存提示"),
tr("文档已经修改,是否保存文档"),
QMessageBox::Ok|
QMessageBox::Cancel|QMessageBox::No,
QMessageBox::Ok)) {
case QMessageBox::Ok:
centerWidget->saveDrawing();
break;
case QMessageBox::Cancel:
return;
case QMessageBox::No:
break;
default:
break;
}
}
centerWidget->newDrawing();
}
void MainWindow::openDrawing() {
if(
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 C++程序开发基于Qt实现的简单绘画板程序源码+项目说明.zip 基于Qt实现的简单绘画板程序。 ## 功能介绍 - 绘制点、直线、椭圆、矩形等基本几何图形; - 存储、读取绘图文件; - 撤回、重做等功能; - 调节线宽、线条颜色; - 显示鼠标坐标位置。 ## 注意事项 程序图标使用绝对路径,图标资源在res文件夹里。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
C++程序开发基于Qt实现的简单绘画板程序源码+项目说明.zip (27个子文件)
centerwidget.h 1KB
ellipse.cpp 872B
point.h 370B
项目说明.md 342B
SimpleDraw_19_1.pro 592B
line.cpp 774B
mainwindow.h 1KB
mainwindow.cpp 10KB
SimpleDraw_19_1.pro.user 18KB
res
undo.png 5KB
new.png 3KB
redo.png 5KB
ellipse.png 5KB
line.png 3KB
rectangle.png 3KB
open.png 3KB
save.png 5KB
point.png 1KB
rectangle.h 419B
ellipse.h 407B
main.cpp 247B
point.cpp 665B
shape.cpp 247B
line.h 399B
centerwidget.cpp 6KB
shape.h 406B
rectangle.cpp 920B
共 27 条
- 1
资源评论
Make程序设计
- 粉丝: 5747
- 资源: 3570
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功