面向对象程序设计实验报告.doc_第1页
面向对象程序设计实验报告.doc_第2页
面向对象程序设计实验报告.doc_第3页
面向对象程序设计实验报告.doc_第4页
面向对象程序设计实验报告.doc_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安 庆 师 范 学 院 计 算 机 与 信 息 学 院Anqing teacher school College of computer and information面向对象程序设计2实验报告专业:计算机科学与技术年级:2013级班级: 工科 1班 学号:070613047姓名:黄剑波目 录实验一:线程通信:门铃1一、实验目的1二、实验内容1三、实验要求1四、实验步骤1五、实验源码2main.cpp2doorbell.h2doorbell.cpp4doorbell.qrc7六、 实验结果与分析7七、 教师评价7实验二:高阶多线程QtConcurrent的使用:ImageLoader8一、实验目的8二、实验内容8三、实验要求8四、实验步骤8五、实验源码9main.cpp9widget.h9widget.cpp10imageloader.qrc11六、实验结果与分析12七、教师评价13实验三:HTTP编程:httpTestTool14一、实验目的14二、实验内容14三、实验要求14四、实验步骤14五、实验源码15main.cpp15widget.h15widget.cpp17六、实验结果与分析35七、教师评价37实验四:FTP:ftpTestTool38一、实验目的38二、实验内容38三、实验要求38四、实验步骤38五、实验源码39main.cpp39widget.h39widget.cpp41六、实验结果与分析48七、教师评价48实验五:TCP服务器:timeService49一、实验目的49二、实验内容49三、实验要求49四、实验步骤49五、实验源码50main.cpp50timeService.h50timeService.cpp51七、教师评价52实验六:TCP:timeClient53一、实验目的53二、实验内容53三、实验要求53四、实验步骤53五、实验源码54main.cpp54widget.h54widget.cpp55timeClient.h56timeClient.cpp57六、实验结果与分析58七、教师评价58 实验一:线程通信:门铃实验时间: 实验地点: A603 一、实验目的1.熟悉QT的多线程编程2.学会使用QThread类创建线程3.掌握使用QT事件进行跨线程通信的方法二、实验内容1.使用QThread类和Qt事件跨线程通信配合完成一个门铃实验。2.门铃示例创建一个工作线程,随机发送门铃事件给GUI线程中的主人,事件中携带客人和礼物的信息,主人如果觉得客人和礼物都满意,就两眼放光,否则就假装不在。三、实验要求1.熟悉QT的多线程编程,了解Qt事件跨线程通信的方法四、实验步骤1.使用QT应用程序向导创建GUI工程2.使用QT Designer设计图形用户界面 拖曳控件 调整布局 设置属性 信号与槽映射3.使用QT Create编写代码4.编译5.构建6.调试五、实验源码main.cpp#include doorbell.h#include int main(int argc, char *argv) QApplication a(argc, argv); Master w; w.show(); return a.exec();doorbell.h#ifndef DOORBELL_H#define DOORBELL_H#include #include #include #include #include #include #include class BellEvent : public QEventpublic: BellEvent(const QString & visitor, const QStringList & gifts); QString m_visitor; QStringList m_gifts; static Type eventType();protected: static Type m_evType;class BellThread;class QTimer;class Ringer : public QObject Q_OBJECTpublic: Ringer(BellThread * t);public slots: void onTimeout();private: BellThread *m_thread;class BellThread : public QThread friend class Ringer;public: BellThread(QObject * receiver);protected: void run();private: QPointer m_receiver;class Master : public QWidget Q_OBJECTpublic: Master(QWidget *parent = 0); Master();protected: bool event(QEvent * e);private: QLabel * m_visitorLabel; QLabel * m_movie;#endif / DOORBELL_Hdoorbell.cpp#include doorbell.h#include #include #include #include #include #include QEvent:Type BellEvent:m_evType = QEvent:None;BellEvent:BellEvent(const QString &visitor, const QStringList &gifts) : QEvent(eventType(), m_visitor(visitor) , m_gifts(gifts)QEvent:Type BellEvent:eventType() if(m_evType = QEvent:None) m_evType = (QEvent:Type)registerEventType(); return m_evType;/BellThread:BellThread(QObject *receiver) : m_receiver(receiver)void BellThread:run() qDebug() BellThread, tid - QThread:currentThreadId(); QScopedPointer firer(new Ringer(this); exec();const char * g_vistors5 = Mary, Peter, John, Haali, Mike;const char * g_gifts7 = apple, iPad mini 2, banana, egg, iPhone 6, Bambook, Kindle Fire HD;Ringer:Ringer(BellThread *t) : m_thread(t) QTimer:singleShot(3000, this, SLOT(onTimeout();void Ringer:onTimeout() if(m_thread-m_receiver.isNull() m_thread-quit(); return; qsrand(QDateTime:currentDateTime().toTime_t(); QStringList gifts; gifts g_gifts qrand() % 7 ; gifts m_receiver, ev); QTimer:singleShot( qrand() % 8 + 2 ) * 1000 , this, SLOT(onTimeout();Master:Master(QWidget *parent) : QWidget(parent), m_visitorLabel(new QLabel) , m_movie(new QLabel) BellThread * t = new BellThread(this); connect(t, SIGNAL(finished(), t, SLOT(deleteLater(); t-start(); QVBoxLayout * layout = new QVBoxLayout; layout-addWidget(m_visitorLabel); QMovie * gif = new QMovie(:/eye.gif); m_movie-setMovie(gif); layout-addWidget(m_movie); m_movie-setVisible(false); layout-addStretch(1); setLayout(layout);Master:Master()bool Master:event(QEvent *e) if(e-type() = BellEvent:eventType() ) BellEvent *ev = (BellEvent*)e; QString str = QString(%1, gitfs %2 ) .arg(ev-m_visitor) .arg(ev-m_gifts.join(;); m_visitorLabel-setText(str); if(ev-m_gifts.contains(iPhone 6) | ev-m_gifts.contains(Kindle Fire HD) m_movie-setVisible(true); m_movie-movie()-start(); else m_movie-setVisible(false); m_movie-movie()-stop(); return true; return QWidget:event(e);doorbell.qrc eye.gif 6、 实验结果与分析7、 教师评价实验二:高阶多线程QtConcurrent的使用:ImageLoader实验时间: 实验地点: A603 一、实验目的1.了解高阶多线程QtConcurrent的意义2.掌握使用高阶多线程QtConcurrent的方法二、实验内容1.Widget类重写paintEvent(),用来绘制QtConcurrent加载的图片三、实验要求1.开启应用程序后加载图片并显示四、实验步骤1.使用QT应用程序向导创建GUI工程2.使用QT Designer设计图形用户界面 拖曳控件 调整布局 设置属性 信号与槽映射3.使用QT Create编写代码4.编译5.构建6.调试五、实验源码main.cpp#include widget.h#include #include int main(int argc, char *argv) QApplication a(argc, argv); QFont f = a.font(); f.setPixelSize(60); a.setFont(f); Widget w; w.show(); return a.exec();widget.h#ifndef WIDGET_H#define WIDGET_H#include #include #include #include class Widget : public QWidget Q_OBJECTpublic: Widget(QWidget *parent = 0); /Widget();protected: void paintEvent(QPaintEvent *e);protected slots: void onLoad(); void onFinished();private: QFutureWatcher m_watcher; QImage m_image;#endif / WIDGET_Hwidget.cpp#include widget.h#include #include #include #include #include QImage loadImage(const QString & uri) QImage image(uri); return image;Widget:Widget(QWidget *parent) : QWidget(parent) , m_watcher(this) connect(&m_watcher, SIGNAL(finished(), this, SLOT(onFinished(); QTimer:singleShot(5000, this, SLOT(onLoad();void Widget:paintEvent(QPaintEvent *e) QPainter painter(this); if(m_image.isNull() painter.drawText(rect(), Qt:AlignCenter, Loading.); else painter.drawImage(rect(), m_image); void Widget:onLoad() QString uri(:/airplay.gif); QFuture future = QtConcurrent:run(loadImage, uri); m_watcher.setFuture(future);void Widget:onFinished() m_image = m_watcher.future().result(); if(!m_image.isNull() repaint(); imageloader.qrc airplay.gif 六、实验结果与分析七、教师评价实验三:HTTP编程:httpTestTool实验时间: 实验地点: A603 一、实验目的1.了解Qt使用QNetworkAccessManager进行http编程的基本方法2.熟悉用QNetworkAccessManager进行http编程的注意事项3.熟悉QNetworkAccessManager、QNetworkRequest、QNetworkReply和QUrl这四个类,以及它们的相互关系二、实验内容1.使用QNetworkAccessManager、QNetworkRequest、QNetworkReply和QUrl这四个类创建一个http访问器三、实验要求1.实现HEAD、GET、POST、DELETE四个方法四、实验步骤1.使用QT应用程序向导创建GUI工程2.使用QT Designer设计图形用户界面 拖曳控件 调整布局 设置属性 信号与槽映射3.使用QT Create编写代码4.编译5.构建6.调试五、实验源码main.cpp#include widget.h#include int main(int argc, char *argv) QApplication a(argc, argv); Widget w; w.show(); return a.exec();widget.h#ifndef WIDGET_H#define WIDGET_H#include #include #include #include #include #include #include #include #include #include #include #include #include class Widget : public QWidget Q_OBJECTpublic: Widget(QWidget *parent = 0); Widget();protected slots: void onAddHttpHeaderValue(); void onStart(); void onMethodChanged(const QString &method); void onMetaDataChanged(); void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); void onUploadProgress(qint64 bytesSent, qint64 bytesTotal); void onReadyRead(); void onFinished();protected: void setupGUI(); void disableControls(); void enableControls();private: QString requestString(QNetworkRequest *req); QString responseString(QNetworkReply *reply); void resetState(); bool openFile(bool save, QString &errorString);protected: QGroupBox * m_headerValueGroup; QLabel * m_headerKeyLabel; QLineEdit * m_headerKeyEdit; QLabel * m_headerValueLabel; QLineEdit * m_headerValueEdit; QPushButton * m_addHttpHeaderValueButton; QGroupBox * m_stateGroup; QTextEdit * m_stateText; QProgressBar * m_progress; QGroupBox * m_paramGroup; QLabel * m_urlLabel; QLineEdit * m_urlEdit; QLabel * m_methodLabel; QComboBox * m_methodCombo; QPushButton * m_startButton; QNetworkAccessManager m_nam; QNetworkReply * m_reply; QNetworkRequest * m_request; QString m_strFilePath; QFile * m_file;#endif / WIDGET_Hwidget.cpp#include widget.h#include #include #include #include #include #include #include static const char * g_ext_to_content_type = .001,application/x-001 ,.301,application/x-301 ,.323,text/h323 ,.906,application/x-906 ,.907,drawing/907 ,.a11,application/x-a11 ,.acp,audio/x-mei-aac ,.ai,application/postscript ,.aif,audio/aiff ,.aifc,audio/aiff ,.aiff,audio/aiff ,.anv,application/x-anv ,.asa,text/asa ,.asf,video/x-ms-asf ,.asp,text/asp ,.asx,video/x-ms-asf ,.au,audio/basic ,.avi,video/avi ,.awf,application/vnd.adobe.workflow ,.biz,text/xml ,.bmp,application/x-bmp ,.bot,application/x-bot ,.c4t,application/x-c4t ,.c90,application/x-c90 ,.cal,application/x-cals ,.cat,application/vnd.ms-pki.seccat ,.cdf,application/x-netcdf ,.cdr,application/x-cdr ,.cel,application/x-cel ,.cer,application/x-x509-ca-cert ,.cg4,application/x-g4 ,.cgm,application/x-cgm ,.cit,application/x-cit ,.class,java/* ,.cml,text/xml ,.cmp,application/x-cmp ,.cmx,application/x-cmx ,.cot,application/x-cot ,.conf,text/plain ,.crl,application/pkix-crl ,.crt,application/x-x509-ca-cert ,.csi,application/x-csi ,.css,text/css ,.cut,application/x-cut ,.dbf,application/x-dbf ,.dbm,application/x-dbm ,.dbx,application/x-dbx ,.dcd,text/xml ,.dcx,application/x-dcx ,.der,application/x-x509-ca-cert ,.dgn,application/x-dgn ,.dib,application/x-dib ,.dll,application/x-msdownload ,.doc,application/msword ,.dot,application/msword ,.drw,application/x-drw ,.dtd,text/xml ,.dwf,Model/vnd.dwf ,.dwf,application/x-dwf ,.dwg,application/x-dwg ,.dxb,application/x-dxb ,.dxf,application/x-dxf ,.edn,application/vnd.adobe.edn ,.emf,application/x-emf ,.eml,message/rfc822 ,.ent,text/xml ,.epi,application/x-epi ,.eps,application/x-ps ,.eps,application/postscript ,.etd,application/x-ebx ,.exe,application/x-msdownload ,.fax,image/fax ,.fdf,application/vnd.fdf ,.fif,application/fractals ,.fo,text/xml ,.frm,application/x-frm ,.g4,application/x-g4 ,.gbr,application/x-gbr ,.gcd,application/x-gcd ,.gif,image/gif ,.gl2,application/x-gl2 ,.gp4,application/x-gp4 ,.hgl,application/x-hgl ,.hmr,application/x-hmr ,.hpg,application/x-hpgl ,.hpl,application/x-hpl ,.hqx,application/mac-binhex40 ,.hrf,application/x-hrf ,.hta,application/hta ,.htc,text/x-component ,.htm,text/html ,.html,text/html ,.htt,text/webviewhtml ,.htx,text/html ,.icb,application/x-icb ,.ico,image/x-icon ,.ico,application/x-ico ,.iff,application/x-iff ,.ig4,application/x-g4 ,.igs,application/x-igs ,.iii,application/x-iphone ,.img,application/x-img ,.ini,text/plain ,.ins,application/x-internet-signup ,.isp,application/x-internet-signup ,.IVF,video/x-ivf ,.java,java/* ,.jfif,image/jpeg ,.jpe,image/jpeg ,.jpe,application/x-jpe ,.jpeg,image/jpeg ,.jpg,image/jpeg ,.jpg,application/x-jpg ,.js,application/x-javascript ,.jsp,text/html ,.la1,audio/x-liquid-file ,.lar,application/x-laplayer-reg ,.latex,application/x-latex ,.lavs,audio/x-liquid-secure ,.lbm,application/x-lbm ,.lmsff,audio/x-la-lms ,.log,text/plain ,.ls,application/x-javascript ,.ltr,application/x-ltr ,.m1v,video/x-mpeg ,.m2v,video/x-mpeg ,.m3u,audio/mpegurl ,.m4e,video/mpeg4 ,.mac,application/x-mac ,.man,application/x-troff-man ,.math,text/xml ,.mdb,application/msaccess ,.mdb,application/x-mdb ,.mfp,application/x-shockwave-flash ,.mht,message/rfc822 ,.mhtml,message/rfc822 ,.mi,application/x-mi ,.mid,audio/mid ,.midi,audio/mid ,.mil,application/x-mil ,.mml,text/xml ,.mnd,audio/x-musicnet-download ,.mns,audio/x-musicnet-stream ,.mocha,application/x-javascript ,.movie,video/x-sgi-movie ,.mp1,audio/mp1 ,.mp2,audio/mp2 ,.mp2v,video/mpeg ,.mp3,audio/mp3 ,.mp4,video/mpeg4 ,.mpa,video/x-mpg ,.mpd,application/vnd.ms-project ,.mpe,video/x-mpeg ,.mpeg,video/mpg ,.mpg,video/mpg ,.mpga,audio/rn-mpeg ,.mpp,application/vnd.ms-project ,.mps,video/x-mpeg ,.mpt,application/vnd.ms-project ,.mpv,video/mpg ,.mpv2,video/mpeg ,.mpw,application/vnd.ms-project ,.mpx,application/vnd.ms-project ,.mtx,text/xml ,.mxp,application/x-mmxp ,.net,image/pnetvue ,.nrf,application/x-nrf ,.nws,message/rfc822 ,.odc,text/x-ms-odc ,.out,application/x-out ,.p10,application/pkcs10 ,.p12,application/x-pkcs12 ,.p7b,application/x-pkcs7-certificates ,.p7c,application/pkcs7-mime ,.p7m,application/pkcs7-mime ,.p7r,application/x-pkcs7-certreqresp ,.p7s,application/pkcs7-signature ,.pc5,application/x-pc5 ,.pci,application/x-pci ,.pcl,application/x-pcl ,.pcx,application/x-pcx ,.pdf,application/pdf ,.pdf,application/pdf ,.pdx,application/vnd.adobe.pdx ,.pfx,application/x-pkcs12 ,.pgl,application/x-pgl ,.pic,application/x-pic ,.pko,application/vnd.ms-pki.pko ,.pl,application/x-perl ,.plg,text/html ,.pls,audio/scpls ,.plt,application/x-plt ,.png,image/png ,.png,application/x-png ,.pot,application/vnd.ms-powerpoint ,.ppa,application/vnd.ms-powerpoint ,.ppm,application/x-ppm ,.pps,application/vnd.ms-powerpoint ,.ppt,application/vnd.ms-powerpoint ,.ppt,application/x-ppt ,.pr,application/x-pr ,.prf,application/pics-rules ,.prn,application/x-prn ,.prt,application/x-prt ,.ps,application/x-ps ,.ps,application/postscript ,.ptn,application/x-ptn ,.pwz,application/vnd.ms-powerpoint ,.r3t,text/vnd.rn-realtext3d ,.ra,audio/vnd.rn-realaudio ,.ram,audio/x-pn-realaudio ,.ras,application/x-ras ,.rat,application/rat-file ,.rdf,text/xml ,.rec,application/vnd.rn-recording ,.red,a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论