基于某LinuxQT图形图像课程设计.docx
- 文档编号:30715026
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:30
- 大小:292.01KB
基于某LinuxQT图形图像课程设计.docx
《基于某LinuxQT图形图像课程设计.docx》由会员分享,可在线阅读,更多相关《基于某LinuxQT图形图像课程设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于某LinuxQT图形图像课程设计
科技学院
QT课程设计
题目制作画图工具
学生
专业班级
学号
所在系
指导教师
完成时间年月日
1概述………………………………………………………………………………1
1.1项目名称…………………………………………………………………1
1.2画图工具基本框架……………………………………………………1
1.3画图工具功能介绍……………………………………………………2
1.3.1菜单…………………………………………………………………2
1.3.2线型选择……………………………………………………………3
1.3.3画笔宽度……………………………………………………………3
1.3.4画笔颜色……………………………………………………………3
1.3.5清空画板……………………………………………………………3
1.3.6绘制图形……………………………………………………………3
1.3.7橡皮擦………………………………………………………………3
1.3.8坐标定位……………………………………………………………3
1.4制作画图工具使用的编程语言……………………………………4
1.5编译环境………………………………………………………………4
1.6使用QT编程语言制作画图工具的优势………………………4
1.7项目制作过程中应用到的QT知识………………………………4
1.7.1信号与槽……………………………………………………………4
1.7.2对话框………………………………………………………………4
1.7.3创建主窗口…………………………………………………………4
1.7.4自定义窗口部件……………………………………………………4
1.7.5布局管理……………………………………………………………5
1.7.6QT中的事件机制……………………………………………………5
1.7.7二维图形的绘制……………………………………………………5
1.8项目中建立的类…………………………………………………………5
1.9类之间的相互关系………………………………………………………5
2总体设计…………………………………………………………………………6
2.1主窗口……………………………………………………………………6
2.1.1创建主窗口…………………………………………………………6
2.1.2添加菜单……………………………………………………………6
2.1.3添加子菜单…………………………………………………………6
2.1.4创建状态栏…………………………………………………………7
2.2悬浮窗……………………………………………………………………7
2.2.1线型选项……………………………………………………………7
2.2.2画笔宽度调节………………………………………………………8
2.1.3画笔颜色选择………………………………………………………8
2.2.4清空画板……………………………………………………………9
2.2.5绘制图形……………………………………………………………9
2.2.6橡皮擦……………………………………………………………9
2.3画板………………………………………………………………………10
2.3.1画布的创建…………………………………………………………10
2.3.2画布的颜色初始化…………………………………………………10
2.3.3画板大小……………………………………………………………10
3详细设计………………………………………………………………………10
3.1子菜单功能的实现……………………………………………………10
3.1.1New功能的实现……………………………………………………10
3.1.2Open功能的实现…………………………………………………11
3.1.3Save功能的实现…………………………………………………11
3.1.4SaveAs功能的实现………………………………………………12
3.2悬浮窗各个功能的实现…………………………………………13
3.2.1Style功能的实现…………………………………………………13
3.2.2Width功能的实现…………………………………………………14
3.2.3Color功能的实现…………………………………………………14
3.2.4Clear功能的实现…………………………………………………16
3.2.5绘图功能的实现…………………………………………………16
3.2.6eraser功能的实现………………………………………………17
3.3鼠标形状设置……………………………………17
3.4坐标位置显示功能的实现……………………17
结束语………………………………………………………………………18
致谢……………………………………………………………………19
参考文献…………………………………………………………………20
1概述
1.1项目名称
制作画图工具
1.2画图工具基本框架
运行结果如下图:
图1.1
图1.2
图1.3
图1.4
1.3画图工具功能介绍
1.3.1菜单
图1.2
1.File
A.New(新建)
B.Open(打开一个图片)
C.Save(保存)
D.SaveAs(另存为)
E.Exit(退出)
图1.3
2.Help
A.About(查看有关本工具的信息)
1.3.2线型选择
A.Solidline
B.Dotline
C.Dashline
1.3.3画笔宽度
Width:
可手动调节画笔宽度
1.3.4画笔颜色
Color:
可手动选择画笔颜色
1.3.5清空画板
Clear:
手动清空整个画板
1.3.6绘制图形
1.矩形rectangle
2.圆角矩形roundrectangle
3.椭圆ellipse(当按着Shift键绘制时为圆形)
4.弦chord
5.线line
1.3.7橡皮擦
Eraser:
宽度可选
1.3.8坐标定位
状态栏:
可以显示鼠标所在位置坐标(图1.4)状态栏
1.4制作画图工具使用的编程语言
基于Linux的嵌入式QT
1.5编译环境
QtCreator
1.6使用QT编程语言制作画图工具的优势
QT具有可以让编程人员灵活运用而且独特于其他编程语言的信号—槽机制,尤其是在本项目制作过程当中遇到的一些棘手问题,当我们使用信号—槽机制来解决的时候,很容易发现,那些原本复杂的问题将变得如此简单。
1.7项目制作过程中应用到的QT知识
1.7.1信号与槽
1.信号与槽的定义
2.信号与槽的关联
3.需要注意的问题
1.7.2对话框
Qt消息框
1.7.3创建主窗口
1.QMainWindow类
2.创建主窗口的方法和流程
3.菜单和子菜单的创建
1.7.4自定义窗口部件
1.QWidget类
2.从QWidget中派生
1.7.5布局管理
1.垂直布局
2.水平布局
3.网格布局
1.7.6QT中的事件机制
1.鼠标事件
2.键盘事件
1.7.7二维图形的绘制
1.QPainter类的应用
2.图像的装载
3.图像的保存
4.坐标变换
5.QImage类应用
6.QT打印图形
1.8项目中建立的类
1.Controlbox类
2.Drawwidget类
3.MainWindow类
1.9类之间的相互关系
Controlbox类:
创建悬浮窗的各个控件(线宽、画笔颜色、清空等等)
Drawwidget类:
创建画板
MainWindow类:
主窗口
主窗口调用Controlbox类和Drawwidget类设定整个画图工具的外部框架。
运用信号-槽机制关联Controlbox类和Drawwidget类中的函数以及MainWindow类和Controlbox类中的函数。
事件机制的实现
2总体设计
2.1主窗口
2.1.1创建主窗口
一般情况下,建立一个QT工程必须要有一个主窗口,而且仅有一个主窗口,所有需要实现的功能,在交互界面中必须在此窗口的基础上来实现,这样才使得整个工程的建立得以实现其自身价值。
一个最简单的主窗口,没有菜单栏,没有工具栏,没有状态栏。
在此我们首先创建一个最简单的主窗口。
2.1.2添加菜单
仅仅创建一个最简单的主窗口除了它所存在的基本框架以外没有任何其他的意义,所以要想实现画图工具所有的功能,接下来就要为主窗口添加菜单项,这是为下一步的循序渐进做铺垫。
添加两个菜单项:
1.File2.Help
File是文件菜单,任何一个关于事物的操作无非都是面向文件,所以文件菜单是一个必不可少的菜单项。
fileMenu=menuBar()->addMenu(tr("&File"));
Help菜单项是关于软件版本的相关信息。
helpMenu=menuBar()->addMenu(tr("&help"));
2.1.3添加子菜单
单单添加菜单项是无法完成任何操作的,在QT里面,每一个事件的完成要么是依靠信号-槽机制进行关联,要么是通过事件机制来连接。
在这里,我们首先添加子菜单,以方便之后借着信号-槽机制实现相应的功能。
添加五个子菜单:
1.New
newAct=newQAction(QIcon(":
/new/prefix1/image/new.PNG"),tr("&New"),this);
2.Open
openAct=newQAction(QIcon(":
/images/open.png"),tr("&Open..."),this);
3.Save
saveAct=newQAction(QIcon(":
/new/prefix1/image/save.PNG"),tr("&Save"),this);
4.SaveAs
saveAsAct=newQAction(tr("Save&As..."),this);
5.Exit
exitAct=newQAction(tr("E&xit"),this);
2.1.4创建状态栏
状态栏是为了显示用户当前操作时的信息,使机器更加人性化。
voidMainWindow:
:
setMousePosDisplay(intx,inty)
{
QStringstr="("+QString:
:
number(x)+","+QString:
:
number(y)+")";
statusBar()->showMessage(str);
}
2.2悬浮窗
悬浮窗只是一个外部的架构,只有通过信号-槽机制将控件与槽函数相关联才能够达到真正的目的。
2.2.1线型选项
Style:
是一个标签,用于表明右边的ComboBox是一个关于线型选择的组合框。
ComboBox里添加有子项,各种线型,比如Solidline、Dotline、Dashline等等。
只需要手动选择其中的一个类型即可实现一种不同线型绘制图形。
实现代码如下:
styleLabel=newQLabel("style");
gridLayout->addWidget(styleLabel,0,0);
styleComboBox=newQComboBox;styleComboBox->addItem(tr("SolidLine"),static_cast
:
SolidLine));styleComboBox->addItem("DashLine",static_cast
:
DashLine));styleComboBox->addItem("DotLine",static_cast
:
DotLine));styleComboBox->addItem("DashDotLine",static_cast
:
DashDotLine));styleComboBox->addItem("DashDotDotLine",static_cast
:
DashDotDotLine));
gridLayout->addWidget(styleComboBox,0,1,1,2);
2.2.2画笔宽度调节
Width是一个标签,用于表明它的右边是一个关于线宽调节的QSpinBox。
可以通过点击QSpinBox上下箭来实现画笔宽度的调节。
代码实现如下:
widthLabel=newQLabel("Width");
widthSpinBox=newQSpinBox;
widthSpinBox->setValue
(1);
gridLayout->addWidget(widthLabel,1,0);
gridLayout->addWidget(widthSpinBox,1,1,1,2);
2.2.3画笔颜色选择
图2.1
通过单击Color右侧的快速存取按钮弹出图2.1对话框,选择其中的颜色之后,单击OK即可选择有效画笔颜色。
实现代码:
colorBtn=newQToolButton;
QPixmappixmap(20,20);
pixmap.fill(Qt:
:
black);
colorBtn->setIcon(QIcon(pixmap));
gridLayout->addWidget(colorBtn,2,1);
2.2.4清空画板
单击Clear按钮即可清除画板上的所有容。
实现代码如下:
clearBtn=newQToolButton();
clearBtn->setText("clear");
gridLayout->addWidget(clearBtn,3,0);
2.2.5绘制图形
接下来是五个按钮,单击其中一个即可选择你想要绘制的基本图形,比如矩形、椭圆、直线等等。
实现代码如下:
rectangle=newQPushButton(QIcon(":
/new/prefix1/image/qpainter-rectangle.png"),tr("rectangle"),0);
roundrect=newQPushButton(QIcon(":
/new/prefix1/image/qpainter-roundrect.png"),tr("roundrect"),0);
ellipse=newQPushButton(QIcon(":
/new/prefix1/image/qpainter-ellipse.png"),tr("ellipse"),0);
chord=newQPushButton(QIcon(":
/new/prefix1/image/qpainter-chord.png"),tr("chord"),0);
line=newQPushButton(QIcon(":
/new/prefix1/image/Line
(2).png"),tr("line"),0);
2.2.6橡皮擦
想要去除某些冗余部分时可以单击选择橡皮擦对冗余部分进行擦除。
实现代码如下:
erasor=newQPushButton(QIcon(":
/new/prefix1/image/cursor_erasor.png"),tr("eraser"),0);
gridLayout->addWidget(erasor,10,0);
2.3画板
2.3.1画布的创建
创建一新的画布,等待用户绘制图片。
实现代码如下:
pix=newQPixmap(this->size());
2.3.2画布的颜色初始化
初始化画布的颜色,使它拥有一个初始背景颜色。
实现代码如下:
pix->fill(Qt:
:
white);
2.3.3画板大小
初始化画布的大小,使它能适合画板控件。
实现代码如下:
pix=newQPixmap(this->size());
setMinimumSize(600,400);
3详细设计
3.1子菜单功能的实现
3.1.1New功能的实现
步骤如下:
新建一个QAction,,并将此子菜单项命名为New
newAct=newQAction(QIcon(":
/new/prefix1/image/new.PNG"),tr("&New"),this);
添加快捷键:
newAct->setShortcuts(QKeySequence:
:
New);Ctrl+N
当鼠标指向此子菜单项的时候,在状态栏显示信息为:
Createanewfile
newAct->setStatusTip(tr("Createanewfile"));
当此子菜单项被触发(单击子菜单项)的时候,激活newFile槽函数。
connect(newAct,SIGNAL(triggered()),this,SLOT(newFile()));
在此应用到信号-槽机制,这是QT里面极为重要的特色容,当一个QAction被触发的时候,系统会自动调用与此信号相关联的槽函数,newFile()是自定义的一个实现新建图片文件的槽函数。
将此QAction添加到File菜单中:
fileMenu->addAction(newAct);
3.1.2Open功能的实现
步骤如下:
新建一个QAction,,并将此子菜单项命名为Open
openAct=newQAction(QIcon(":
/images/open.png"),tr("&Open..."),this);
添加快捷键:
openAct->setShortcuts(QKeySequence:
:
Open);Ctrl+O
当鼠标指向此子菜单项的时候,在状态栏显示信息为:
Openanexistingfile
openAct->setStatusTip(tr("Openanexistingfile"));
当此子菜单项被触发(单击子菜单项)的时候,激活Open()槽函数。
connect(openAct,SIGNAL(triggered()),this,SLOT(open()));
在此应用到信号-槽机制,这是QT里面极为重要的特色容,当一个QAction被触发的时候,系统会自动调用与此信号相关联的槽函数,open()是自定义的一个实现打开一个图片文件的槽函数。
将此QAction添加到File菜单中:
fileMenu->addAction(openAct);
3.1.3Save功能的实现
步骤如下:
新建一个QAction,,并将此子菜单项命名为Save
saveAct=newQAction(QIcon(":
/new/prefix1/image/save.PNG"),tr("&Save"),this);
添加快捷键:
saveAct->setShortcuts(QKeySequence:
:
Save);Ctrl+s
当鼠标指向此子菜单项的时候,在状态栏显示信息为:
Savethedocumenttodisk
saveAct->setStatusTip(tr("Savethedocumenttodisk"));
当此子菜单项被触发(单击子菜单项)的时候,激活Save()槽函数。
connect(saveAct,SIGNAL(triggered()),this,SLOT(save()));
在此应用到信号-槽机制,这是QT里面极为重要的特色容,当一个QAction被触发的时候,系统会自动调用与此信号相关联的槽函数,Save()是自定义的一个实现保存图片文件的槽函数。
将此QAction添加到File菜单中:
fileMenu->addAction(saveAct);
3.1.4SaveAs功能的实现
步骤如下:
新建一个QAction,,并将此子菜单项命名为SaveAs
saveAsAct=newQAction(tr("Save&As..."),this);
添加快捷键:
saveAsAct->setShortcuts(QKeySequence:
:
SaveAs);Ctrl+s+a
当鼠标指向此子菜单项的时候,在状态栏显示信息为:
Savethedocumentunderanewname
saveAsAct->setStatusTip(tr("Savethedocumentunderanewname"));
当此子菜单项被触发(单击子菜单项)的时候,激活saveAs()槽函数。
connect(saveAsAct,SIGNAL(triggered()),this,SLOT(saveAs()));
在此应用到信号-槽机制,这是QT里面极为重要的特色容,当一个QAction被触发的时候,系统会自动调用与此信号相关联的槽函数,saveAs()是自定义的一个实现将图片文件另存为一个新文件的槽函数。
将此QAction添加到File菜单中:
fileMenu->addAction(saveAsAct);
3.1.5Exit功能的实现
步骤如下:
新建一个QAction,,并将此子菜单项命名为Exit
exitAct=newQAction(tr("E&xit"),this);
添加快捷键:
exitAct->setShortcuts(QKeySequence:
:
Quit);
当鼠标指向此子菜单项的时候,在状态栏显示信息为:
Exittheapplication
exitAct->setStatusTip(tr("Exittheapplication"));
当此子菜单项被触发(单击子菜单项)的时候,激活close()槽函数。
connect(exitAct,SIGNAL(triggered()),this,SLOT(close()));
在此应用到信号-槽机制,这是QT里面极为重要的特色容,当一个QAction被触发的时候,系统会自动调用与此信号相关联的槽函数,close()是系统部的一个实现关闭或者退出一个应用程序的槽函数。
将此QAction添加到File菜单中:
fileMenu->addAction(exitAct);
3.2悬浮窗各个功能的实现
3.2.1Style功能的实现
在组合框中添加线型:
styleComboBox->addItem(tr("SolidLine"),static_cast
:
SolidLine));
styleComboBox->addItem("DashLine",static_cast
:
DashLine));
styleComboBox->addItem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 LinuxQT 图形图像 课程设计