qt画图实验报告doc文档格式.docx
- 文档编号:21435321
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:11
- 大小:17.42KB
qt画图实验报告doc文档格式.docx
《qt画图实验报告doc文档格式.docx》由会员分享,可在线阅读,更多相关《qt画图实验报告doc文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
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中
widget()->
setMinimumSize(800,600);
//scrollArea初始化大小设为800*600
dockWidget->
hide();
setCentralWidget(scrollArea);
//将scrollArea加入到主窗口的中心区
isSaved=false;
curFile=tr("
未命名.png"
);
creatColorComboBox(ui->
penColorComboBox);
//画笔颜色组合框
brushColorComboBox);
//填充颜色组合框
}
~MainWindow()
deleteui;
voidMainWindow:
changeEvent(QEvent*e)
QMainWindow:
changeEvent(e);
switch(e->
type()){
caseQEvent:
LanguageChange:
retranslateUi(this);
break;
default:
doOpen()
if(maybeSave())
QStringfileName=QFileDialog:
getOpenFileName(this,
tr("
打开文件"
),QDir:
currentPath());
if(!
fileName.isEmpty())
area->
openImage(fileName);
resize(area->
getImageSize());
//获得图片的大小,然后更改scrollArea的大小
isSaved=true;
curFile=fileName;
doNew()
if(maybeSave())
DoNewDialogdlg;
if(dlg.exec()==QDialog:
Accepted)
intwidth=dlg.getWidth();
intheight=dlg.getHeight();
setImageSize(width,height);
resize(width,height);
setImageColor(dlg.getBackColor());
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;
doFileSave()
if(isSaved)
returnsaveFile(curFile);
elsereturndoFileSaveAs();
saveFile(QStringfileName)
saveImage(fileName,"
png"
))
篇二:
C++实验报告-QTPaintPad
《面向对象程序设计与C++》实验报告
报告创建时间:
篇三:
QT实验五QT绘图基础实验
QT绘图基础实验
(一)编程绘图实现显示时钟窗口
使用定时器和QPAINTER类绘制时钟,包括使用刷子、画笔、定义坐标旋转、刻度定义、画线等函数,完成时钟实时显示。
定义一个GUI工程,包含下列文件:
源文件analogclock.h代码
classAnalogClock:
publicQWidget
Q_OBJECT
public:
AnalogClock(QWidget*parent=0);
protected:
voidpaintEvent(QPaintEvent*event);
};
源文件main.cpp代码
analogclock.h"
intmain(intargc,char*argv[])
QApplicationa(argc,argv);
AnalogClockclock;
clock.show();
returna.exec();
源文件AnalogClock.cpp代码
AnalogClock:
AnalogClock(QWidget*parent)
QWidget(parent)
QTimer*timer=newQTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
timer->
start(1000);
AnalogClock"
resize(200,200);
voidAnalogClock:
paintEvent(QPaintEvent*)
staticconstQPointhourHand[3]={
QPoint(7,8),
QPoint(-7,8),
QPoint(0,-40)
staticconstQPointminuteHand[3]={
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;
i painter.drawLine(88,0,96,0);
painter.rotate(30.0);
painter.setPen(Qt:
painter.setBrush(minuteColor);
painter.rotate(6.0*(time.minute()+time.second()/60.0));
painter.drawConvexPolygon(minuteHand,3);
painter.setPen(minuteColor);
for(intj=0;
j if((j%5)!
=0)
painter.drawLine(92,0,96,0);
painter.rotate(6.0);
运行后的效果如下:
思考:
如何添加代码实现秒指针的显示?
painter.setPen(QColor(0,55,223));
painter.rotate(6.0*time.second());
painter.drawLine(0,0,0,-90);
(二)画棋程序
使用画图事件处理鼠标绘制点击过程,使用了画笔、刷子、画线、画圆及坐标计算等方法,完成下棋程序。
(基类是QWidget类)
源文件widget.cpp代码
widget.h"
ui_widget.h"
Widget:
Widget(QWidget*parent):
QWidget(parent),
Widget)
structCHESS{
structCHESS*next;
intx;
//横坐标
inty;
//纵坐标
intcolor;
//颜色
}*cur=(CHESS*)malloc(sizeof(CHESS)),*p,*q=cur;
intcount=0;
~Widget()
voidWidget:
paintEvent(QPaintEvent*event){
intc;
painter.setBrush(QBrush(Qt:
yellow,Qt:
SolidPattern));
//将笔刷设置成黄颜色
painter.drawRect(0,0,256,256);
//调用矩形函数画背景
painter.setPen(QPen(Qt:
black,1));
//设置画笔为黑色,宽度是1for(inti=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)
black,Qt:
//设置黑色的笔刷
black);
//设置黑色的画笔
else
white,Qt:
//设置白色的笔刷
white);
//设置白色的画笔
painter.drawEllipse(16*p->
x-3,16*p->
y-3,6,6);
//带入棋子的大小参数,和坐标点
p=p->
count--;
count=c;
mousePressEvent(QMouseEvent*event){
QPointpoint=event->
pos();
//获取点击位置
intx=qRound(float(point.x())/16);
inty=qRound(float(point.y())/16);
CHESS*abc=(CHESS*)malloc(sizeof(CHESS));
abc->
x=x;
y=y;
if(count%2==0)
color=0;
color=1;
q->
next=abc;
q=abc;
count++;
update();
源文件widget.h代码
#ifndefWIDGET_H
#defineWIDGET_H
#include
namespaceUi{
classWidget;
classWidget:
explicitWidget(QWidget*parent=0);
~Widget();
private:
Ui:
Widget*ui;
voidmousePressEvent(QMouseEvent*event);
};
#endif//WIDGET_H
运行后的效果如下图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- qt 画图 实验 报告 doc