qt画图实验报告docWord文件下载.docx
《qt画图实验报告docWord文件下载.docx》由会员分享,可在线阅读,更多相关《qt画图实验报告docWord文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
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();
area->
setImageSize(width,height);
scrollArea->
resize(width,height);
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;
doFileSave()
if(isSaved)
returnsaveFile(curFile);
elsereturndoFileSaveAs();
saveFile(QStringfileName)
{if(area->
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;
ipainter.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;
jif((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;
//颜色
(CHESS
}*cur=
*)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(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)
black,Qt:
SolidPattern)
//设置黑色的笔刷
black);
//设置黑色的画笔}
else
white,Qt:
//设置白色的笔刷
white);
//设置白色的画笔}
painter.drawEllipse(16*p->
x-3,16*p->
y-3,6,
6);
//带入棋子的大小参数,和坐标点
p=p->
count--;
count=c;
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;
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
namespaceUi{
classWidget;
classWidget:
explicitWidget(QWidget*parent=0);
~Widget();
private:
Ui:
Widget*ui;
voidmousePressEvent(QMouseEvent*event);
};
#endif//WIDGET_H
运行后的效果如下图