基于某LinuxQT图形图像课程设计.docx

上传人:b****5 文档编号:30715026 上传时间:2023-08-19 格式:DOCX 页数:30 大小:292.01KB
下载 相关 举报
基于某LinuxQT图形图像课程设计.docx_第1页
第1页 / 共30页
基于某LinuxQT图形图像课程设计.docx_第2页
第2页 / 共30页
基于某LinuxQT图形图像课程设计.docx_第3页
第3页 / 共30页
基于某LinuxQT图形图像课程设计.docx_第4页
第4页 / 共30页
基于某LinuxQT图形图像课程设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

基于某LinuxQT图形图像课程设计.docx

《基于某LinuxQT图形图像课程设计.docx》由会员分享,可在线阅读,更多相关《基于某LinuxQT图形图像课程设计.docx(30页珍藏版)》请在冰豆网上搜索。

基于某LinuxQT图形图像课程设计.docx

基于某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(Qt:

:

SolidLine));styleComboBox->addItem("DashLine",static_cast(Qt:

:

DashLine));styleComboBox->addItem("DotLine",static_cast(Qt:

:

DotLine));styleComboBox->addItem("DashDotLine",static_cast(Qt:

:

DashDotLine));styleComboBox->addItem("DashDotDotLine",static_cast(Qt:

:

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(Qt:

:

SolidLine));

styleComboBox->addItem("DashLine",static_cast(Qt:

:

DashLine));

styleComboBox->addItem

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1