qt画图实验报告doc.docx
- 文档编号:5781799
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:10
- 大小:18.08KB
qt画图实验报告doc.docx
《qt画图实验报告doc.docx》由会员分享,可在线阅读,更多相关《qt画图实验报告doc.docx(10页珍藏版)》请在冰豆网上搜索。
qt画图实验报告doc
qt画图实验报告
篇一:
QT综合作业实验报告
一、实验目的
1,了解并掌握Qt集成开发环境下使用QtDesigner开发图形界面程序的流程和相关
操作;
2,了解并掌握Qt的信号槽和信号传递机制,并通过具体应用加深理解;
3,了解并掌握使Qt应用程序支持中文或国际化的方法,并在本次实验中使用;4,了解并掌握QPainter的translate、shear等库函数的使用方法和Widget类的使
用方法,并通过本次实验加深理解;
5,掌握在QtDesigner界面上为菜单项添加工具栏按钮、创建相应槽函数的方法;6,了解并掌握使用双缓冲机制绘图的方法。
二、实验环境
操作系统:
Windows7
应用软件:
QtCreator
开发平台:
qt-sdk-win-opensource-XX.04
三、程序流程图
四、核心源代码
mainwindow.cpp的内容(实现菜单项的功能和绘图功能的调用)
#include"mainwindow.h"
#include"ui_mainwindow.h"
#include"donewdialog.h"
#include
#include
#include
#include"aboutdialog.h"
MainWindow:
:
MainWindow(QWidget*parent):
QMainWindow(parent),
ui(newUi:
:
MainWindow)
ui->setupUi(this);
setWindowTitle(tr("Qt绘图板"));
setFixedSize(700,500);//主窗口大小设为700*500
area=newPaintArea;
scrollArea=newQScrollArea;
scrollArea->setBackgroundRole(QPalette:
:
Dark);
//scrollArea对象的背景色设为DarkscrollArea->setWidget(area);//将画布添加到scrollArea中
scrollArea->widget()->setMinimumSize(800,600);
//scrollArea初始化大小设为800*600
ui->dockWidget->hide();
setCentralWidget(scrollArea);//将scrollArea加入到主窗口的中心区
isSaved=false;
curFile=tr("未命名.png");
creatColorComboBox(ui->penColorComboBox);//画笔颜色组合框
creatColorComboBox(ui->brushColorComboBox);//
充颜色组合框
}
MainWindow:
:
~MainWindow()
{
deleteui;
}
voidMainWindow:
:
changeEvent(QEvent*e)
{
QMainWindow:
:
changeEvent(e);
switch(e->type()){
caseQEvent:
:
LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
voidMainWindow:
:
doOpen()
{
if(maybeSave())
{
QStringfileName
QFileDialog:
:
getOpenFileName(this,
tr("打开文件"),QDir:
:
currentPath());
if(!
fileName.isEmpty())
{area->openImage(fileName);
scrollArea->widget()->resize(area->getImageSize());
//获得图片的大小,然后更改scrollArea的大小isSaved=true;
curFile=fileName;
}
voidMainWindow:
:
doNew()
{
if(maybeSave())
{
DoNewDialogdlg;
if(dlg.exec()==QDialog:
:
Accepted)
{
intwidth=dlg.getWidth();
intheight=dlg.getHeight();area->setImageSize(width,height);scrollArea->widget()->resize(width,height);area->setImageColor(dlg.getBackColor());isSaved=false;
}
boolMainWindow:
:
maybeSave()
{
if(area->isModified())
{
QMessageBox:
:
StandardButtonbox;
box=QMessageBox:
:
warning(this,tr("保存文件"),tr("图片已经改变,是否保存?
"),QMessageBox:
:
Yes|QMessageBox:
:
No|QMessageBox:
:
Cancel);
if(box==QMessageBox:
:
Yes)
{
returndoFileSave();
}
elseif(box==QMessageBox:
:
Cancel)
{
returnfalse;
returntrue;
}
boolMainWindow:
:
doFileSave()
{
if(isSaved)
{
returnsaveFile(curFile);
}
elsereturndoFileSaveAs();
}
boolMainWindow:
:
saveFile(QStringfileName)
{if(area->saveImage(fileName,"png"))
篇二:
C++实验报告-QTPaintPad
《面向对象程序设计与C++》实验报告
报告创建时间:
篇三:
QT实验五QT绘图基础实验
QT绘图基础实验
(一)编程绘图实现显示时钟窗口
使用定时器和QPAINTER类绘制时钟,包括使用刷子、画笔、定义坐标旋转、刻度定义、画线等函数,完成时钟实时显示。
定义一个GUI工程,包含下列文件:
源文件analogclock.h代码
#include
classAnalogClock:
publicQWidget
{
Q_OBJECT
public:
AnalogClock(QWidget*parent=0);
protected:
voidpaintEvent(QPaintEvent*event);
};
源文件main.cpp代码
#include
#include"analogclock.h"
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
AnalogClockclock;
clock.show();
returna.exec();
}
源文件AnalogClock.cpp代码
#include
#include"analogclock.h"
AnalogClock:
:
AnalogClock(QWidget*parent)
:
QWidget(parent)
{
QTimer*timer=newQTimer(this);
connect(timer,
SIGNAL(timeout()),
this,
SLOT(update()));
timer->start(1000);
setWindowTitle(tr("AnalogClock"));
resize(200,200);
}
voidAnalogClock:
:
paintEvent(QPaintEvent*)
{
staticconstQPointhourHand[3]={
QPoint(7,8),
QPoint(-7,8),
QPoint(0,-40)
};
staticconstQPointminuteHand[3]={
QPoint(7,8),
QPoint(-7,8),
QPoint(0,-70)
};
QColorhourColor(127,0,127);
QColorminuteColor(0,127,127);
intside=qMin(width(),height());
QTimetime=QTime:
:
currentTime();
QPainterpainter(this);painter.setRenderHint(QPainter:
:
Antialiasing);painter.translate(width()/2,height()/2);painter.scale(side/200.0,side/200.0);
painter.
setPen(Qt:
:
NoPen);
painter.setBrush(hourColor);
painter.save();
painter.rotate(30.0*((time.hour()
time.minute()/60.0)));
painter.drawConvexPolygon(hourHand,3);
painter.restore();
painter.setPen(hourColor);
for(inti=0;ipainter.drawLine(88,0,96,
0);
painter.rotate(30.0);
}
painter.setPen(Qt:
:
NoPen);
painter.setBrush(minuteColor);
painter.save();
painter.rotate(6.0*(time.minute()
time.second()/60.0));painter.drawConvexPolygon(minuteHand,3);
painter.restore();
painter.setPen(minuteColor);
painter.save();
for(intj=0;jif((j%5)!
=0)
painter.drawLine(92,0,96,0);
painter.rotate(6.0);
painter.restore();
}
运行后的效果如下:
思考:
如何添加代码实现秒指针的显示?
painter.setPen(QColor(0,55,223));
painter.rotate(6.0*time.second());painter.drawLine(0,0,0,-90);
(二)画棋程序使用画图事件处理鼠标绘制点击过程,使用了画笔、刷子、画线、画圆及坐标计算等方法,完成下棋程序。
定义一个GUI工程,包含下列文件:
(基类是QWidget类)
源文件widget.cpp代码
#include"widget.h"
#include"ui_widget.h"
#include
Widget:
:
Widget(QWidget*parent):
QWidget(parent),
ui(newUi:
:
Widget)
{
ui->setupUi(this);
}
structCHESS{
structCHESS*next;
intx;//横坐标
inty;//纵坐标
intcolor;//颜色
(CHESS
}*cur=
*)malloc(sizeof(CHESS)),*p,*q=cur;
intcount=0;
Widget:
:
~Widget()
{
deleteui;
voidWidget:
:
paintEvent(QPaintEvent*event){
QPainterpainter(this);
intc;
painter.setBrush(QBrush(Qt:
:
yellow,Qt:
:
SolidPattern
));//将笔刷设置成黄颜色
painter.drawRect(0,0,256,256);//调用矩形函数
画背景
painter.setPen(QPen(Qt:
:
black,1));//设置画笔为
黑色,宽度是1for(int
1;i
{painter.drawLine(16,16*(i),240,16*(i));
painter.drawLine(16*(i),16,16*(i),240);
painter.drawEllipse(16*4-3,16*4-3,6,6);//利用画圆函数带入相应参数
painter.drawEllipse(240-16*3-3,240-16*3-3,6,6);
painter.drawEllipse(16*4-3,240-16*3-3,6,6);
painter.drawEllipse(240-16*3-3,16*4-3,6,6);painter.drawEllipse(16*8-3,16*8-3,6,6);
p=cur->next;
c=count;
while(count!
=0)
{if(p->color==0)
{
painter.setBrush(QBrush(Qt:
:
black,Qt:
:
SolidPattern)
);//设置黑色的笔刷
painter.setPen(Qt:
:
black);//设置黑色的画笔}
else
{
painter.setBrush(QBrush(Qt:
:
white,Qt:
:
SolidPattern)
);//设置白色的笔刷
painter.setPen(Qt:
:
white);//设置白色的画笔}
painter.drawEllipse(16*p->x-3,16*p->y-3,6,
6);//带入棋子的大小参数,和坐标点
p=p->next;
count--;
}
count=c;
}
voidWidget:
:
mousePressEvent(QMouseEventevent){
QPointpoint=event->pos();//获取点击位置
intx=qRound(float(point.x())/16);
inty=qRound(float(point.y())/16);
CHESS*abc=(CHESS*)malloc(sizeof(CHESS));
abc->x=x;
abc->y=y;
if(count%2==0)abc->color=0;
elseabc->color=1;
q->next=abc;
q=abc;
count++;
update();
}
源文件widget.h代码
#ifndefWIDGET_H
#defineWIDGET_H
#include
namespaceUi{
classWidget;
}
classWidget:
publicQWidget
{
Q_OBJECT
public:
explicitWidget(QWidget*parent=0);~Widget();private:
Ui:
:
Widget*ui;
protected:
voidpaintEvent(QPaintEvent*event);
voidmousePressEvent(QMouseEvent*event);};#endif//WIDGET_H
运行后的效果如下图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- qt 画图 实验 报告 doc