ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:1.28MB ,
资源ID:4417825      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4417825.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实训四.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实训四.docx

1、实训四上海第二工业大学计算机科学与技术系学生实训报告课程名称嵌入式操作系统课程设计实训类别验证型实训项目名称布局管理、事件处理和图像班级10计科A1姓名学号实训时间2013年11月1日实训地点15号楼507指导教师组号同组学生信息(请填写在下方)班级姓名学号一、实训目的1、了解并掌握QT提供的多种布局管理部件,包括QT布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等;2、分析Qt的常用事件,包括鼠标事件、键盘事件以及事件过滤器的使用方法;3、掌握QPainter、QCanvas与OpenGL进行绘图的基本方法,并注意这三类方式使用的异同点。二、设备和仪器装有Linux和Windows操

2、作系统的PC机一台三、 实训内容1、 完成书本第六部分“布局管理”中的两个例题QScrollView的IconEditor和多文档界面的Editor;QScrollView的IconEditor运行结果:主要代码注释如下:ImageEditor.cppImageEditor:ImageEditor(QWidget *parent , const char *name ) :QScrollView(parent, name, WStaticContents | WNoAutoErase) curColor = black; zoom = 8;curImage.create(16,16,32);/

3、若没有加载图片,则将画布的大小设置为16*16大小的 curImage.fill(qRgba(0,0,0,0);/ 颜色为白色 curImage.setAlphaBuffer(true); resizeContents(); /此函数用于管理初始窗口部件获取自己的大小void ImageEditor:resizeContents() QSize size = zoom*curImage.size(); if(zoom = 3) size += QSize(1,1); /若zoom大于等于3,size则放大一格 QScrollView:resizeContents(size.width(), s

4、ize.height();/QScrollView是否显示滚动条由窗口的大小决定void ImageEditor:setImage(const QImage &newImage) /获取所要显示的图片 if(newImage != curImage) curImage = newImage.convertDepth(32); curImage.detach(); resizeContents(); /重新获得大小 updateContents();/重新绘制图片 void ImageEditor:contentsMousePressEvent(QMouseEvent *event) /鼠标点击

5、事件 if(event-button() = LeftButton) /左击事件 setImagePixel(event-pos(), true); else if(event-button() = RightButton) /右击事件 setImagePixel(event-pos(), false);void ImageEditor:cotentMouseMoveEvent(QMouseEvent *event) /鼠标按住拖动事件 if(event-state() & LeftButton) /左击事件 setImagePixel(event-pos(), true); else if(

6、event-state() & RightButton) /右击事件 setImagePixel(event-pos(), false);int main(int argc, char *argv) QApplication app(argc, argv); ImageEditor *imageEditor = new ImageEditor; imageEditor-setImage(QImage:QImage(mouse.png,0); /加载资源图片mouse.png app.setMainWidget(imageEditor); imageEditor-show(); /显示窗口 re

7、turn app.exec();多文档界面的Editor运行结果:MainWindow:MainWindow(QWidget *parent, const char *name) : QMainWindow(parent, name) workspace = new QWorkspace(this); /创建一个窗口部件 setCentralWidget(workspace); /使其成为中央窗口部件 connect(workspace, SIGNAL(windowActivated(QWidget *), this, SLOT(updateMenus(); connect(workspace

8、, SIGNAL(windowActivated(QWidget *), /槽用于保持菜单栏和状态栏总是用于反应,当前激活子菜单的窗口状态。 this, SLOT(updateModIndicator(); createActions(); createMenus(); createToolBars(); createStatusBar(); setCaption(tr(Editor); setIcon(QPixmap:fromMimeSource(icon.png);void MainWindow:updateMenus() /只要一个窗口被激活或最后一个被关闭,updatemenu就会被调

9、用 bool hasEditor = (activeEditor() != 0); saveAct-setEnabled(hasEditor); saveAsAct-setEnabled(hasEditor); pasteAct-setEnabled(hasEditor); deleteAct-setEnabled(hasEditor); copyAvailable(activeEditor() & activeEditor()-hasSelectedText(); closeAct-setEnabled(hasEditor); closeAllAct-setEnabled(hasEditor

10、); tileAct-setEnabled(hasEditor); cascadeAct-setEnabled(hasEditor); nextAct-setEnabled(hasEditor); previousAct-setEnabled(hasEditor); windowsMenu-clear(); /若不存在激活的窗口,清空windows菜单 createWindowsMenu();2. 编写程序ch_501,实现程序界面如下:下方文本框可以输入内容(保存类型为All Files(*.*)),所有菜单及工具按钮均可实现功能。File菜单如下:Help菜单如下:About菜单为:Abo

11、ut Qt菜单为实验过程:1. 运行结果:2、 完成书本第七部分“事件处理”中的例题Ticker;#include #include ticker.hTicker:Ticker(QWidget *parent, const char *name) : QWidget(parent, name) offset = 0; /设置被绘制文本X坐标 myTimerId = 0; /定时器标示器void Ticker:setText(const QString &newText) myText = newText; update(); /强制重新绘制 updateGeometry(); /提示ticke

12、r窗口布局的变化QSize Ticker:sizeHint() const return fontMetrics().size(0, text();void Ticker:paintEvent(QPaintEvent *) QPainter painter(this); int textWidth = fontMetrics().width(text(); /确定文版需要多少水平空间 if (textWidth 1) return; int x = -offset; while (x timerId() = myTimerId) +offset; if (offset = fontMetric

13、s().width(text() offset = 0; scroll(-1, 0); /左移一个像素 else QWidget:timerEvent(event); void Ticker:hideEvent(QHideEvent *) killTimer(myTimerId); /当文本消失时,释放对应的定时器3、 请按下列程序源代码,编写ch_601,并在程序后进行注释:ch_601.cpp的源程序为:#include #include #include #include #include #include ch_601.hch_601:ch_601(QWidget *parent, c

14、onst char *name):QWidget(parent,name) for(int a=0 ; a start(1000);void ch_601:updateCaption() QString s; s.sprintf(QObject:tr(QTimer实例),rectangles); /设置caption为“QTimer实例”和举行数 rectangles = 0; setCaption(s);void ch_601:paintEvent(QPaintEvent *) QPainter paint(this); int w = width(); /宽w int h = height

15、(); /高h if(w = 0 | h = 0) /若w=0或h=0 return ; /返回 paint.setPen(NoPen); /若没有画笔则设置画笔 paint.setBrush(colorsrand() % numColors); /画刷颜色随机 QPoint p1(rand()%w,rand()%h); /设置矩形的位置 QPoint p2(rand()%w,rand()%h); QRect r(p1,p2); paint.drawRect(r); /画矩形void ch_601:timerEvent(QTimerEvent *) for(int i =0 ; i 100;

16、i+) repaint(false); /在一个绘画窗口发送之前,之前的窗口不会被擦除 rectangles+; /矩形累加 Main.cpp的源程序为:#include #include #include ch_601.hint main(int argc, char *argv) QApplication a(argc,argv); ch_601 always(0,0); QTextCodec:setCodecForTr(QTextCodec:codecForName(gb18030); /设置标题字体 always.resize(400, 250); /初始化窗体 a.setMainWi

17、dget(&always); always.setCaption(QObject:tr(时钟的测试例题); always.show(); return a.exec();ch_601.h的源程序为:#ifndef CH_601_H#define CH_601_H#include const int numColors = 120;class Ch_601 : public QWidget Q_OBJECTpublic: Ch_601( QWidget *parent=0, const char *name=0 );protected: void paintEvent( QPaintEvent

18、* ); void timerEvent( QTimerEvent * );private slots: void updateCaption();private: int rectangles; QColor colorsnumColors;#endifCh_601运行结果:4、 请按下列程序源代码(其中主程序自编),编写ch_602,并在程序后进行注释:#include progressbar.h#include #include #include #include #include ProgressBar:ProgressBar(QWidget *parent , const char

19、*name ) :QButtonGroup(0, Horizontal, QObject:tr(进度条测试), parent, name), timer() setMargin(10); /设置边距 QGridLayout* toplayout = new QGridLayout(layout(), 2,2, 5); / 设置空间组 setRadioButtonExclusive(TRUE); /按键单一选择 slow = new QRadioButton(QObject:tr(低速),this); /设置低速,中速,高速三个选项 normal = new QRadioButton(QObje

20、ct:tr(中速), this); fast = new QRadioButton(QObject:tr(高速), this); QVBoxLayout* vb1 = new QVBoxLayout; /新建一个box toplayout-addLayout(vb1, 0, 0); /嵌套布局 vb1-addWidget(slow); /添加slow,normal,fast到布局 vb1-addWidget(normal); vb1-addWidget(fast); start = new QPushButton(QObject:tr(开始), this); /新建开始按钮 reset = n

21、ew QPushButton(QObject:tr(重启), this); /新建重启按钮 QVBoxLayout* vb2 = new QVBoxLayout; toplayout-addLayout(vb2, 0, 1); vb2-addWidget(start); vb2-addWidget(reset); progress = new QProgressBar(100, this); /添加进度条 toplayout-addMultiCellWidget(progress, 1, 1, 0, 1); /1列插入progressbar占2行2列 connect(start, SIGNAL

22、(clicked(), this, SLOT(slotStart(); / 点击开始触发开始槽 connect(reset, SIGNAL(timeout(), this, SLOT(slotTimeout(); /点击重置触发timeout槽 normal-setChecked(TRUE); /默认选中设置为中速 start-setFixedWidth(80); /设置最大最小宽度为80 setMinimumWidth(300); /设置最小宽度300 void ProgressBar:slotStart() if(progress-progress() = -1) if(slow-isCh

23、ecked() progress-setTotalSteps(10000); /slow进度条满需10000小时 else if(normal-isChecked() progress-setTotalSteps(1000); /normal进度条满需1000小时 else progress-setTotalSteps(50); /fast进度条满需50小时 slow-setEnabled(FALSE); /slow不能选中 normal-setEnabled(FALSE); /normal不能选中 fast-setEnabled(FALSE); /fast不能选中 if(!timer.isA

24、ctive() /若时钟未被激活 timer.start(1); /时钟设置为1 start-setText(QObject:tr(暂停); else timer.stop(); /时间停止 start-setText(QObject:tr(继续); void ProgressBar:slotReset() /进度条重置 timer.stop(); start-setText(QObject:tr(开始); start-setEnabled(TRUE); /start可以被选择 slow-setEnabled(TRUE); /slow可以被选择 normal-setEnabled(TRUE);

25、 /normal可以被选择 fast-setEnabled(TRUE); /fast可以被选择 progress-reset(); /进度条重置 void ProgressBar:slotTimeout() int p = progress-progress(); /声明p,用于保存进度条 #if 1 if(p = progress-totalSteps() /若进度条满 start-setText(QObject:tr(开始); start-setEnabled(FALSE); return; #endif progress-setProgress(+p); processbar.h的源程序

26、为:#ifndef PROGRESSBAR_H#define PROGRESSBAR_H#include #include class QRadioButton;class QPushButton;class QProgressBar;class ProgressBar : public QButtonGroup Q_OBJECTpublic: ProgressBar( QWidget *parent = 0, const char *name = 0 );protected: QRadioButton *slow, *normal, *fast; QPushButton *start, *pause, *reset; QProgressBar *progress; QTimer timer;protected slots: void slotStart(); void slotReset(); void slotTimeout();#endifMain.cpp源程序为:#include #include progressbar.hint main(int argc, char *argv) QApplication a(argc,argv); ProgressBa

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

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