文档库 最新最全的文档下载
当前位置:文档库 › QT实验报告

QT实验报告

QT实验报告
QT实验报告

面向对象程序设计2

实验报告

专业:计算机科学与技术

年级:2013级

班级:工科1班

学号:070613047

姓名:黄剑波

目录

实验一:线程通信:门铃 (1)

一、实验目的 (1)

二、实验内容 (1)

三、实验要求 (1)

四、实验步骤 (1)

五、实验源码 (2)

main.cpp (2)

doorbell.h (2)

doorbell.cpp (4)

doorbell.qrc (7)

六、实验结果与分析 (7)

七、教师评价 (7)

实验二:高阶多线程QtConcurrent的使用:ImageLoader (8)

一、实验目的 (8)

二、实验内容 (8)

三、实验要求 (8)

四、实验步骤 (8)

五、实验源码 (9)

main.cpp (9)

widget.h (9)

widget.cpp (10)

imageloader.qrc (11)

六、实验结果与分析 (12)

七、教师评价 (13)

实验三:HTTP编程:httpTestTool (14)

一、实验目的 (14)

二、实验内容 (14)

三、实验要求 (14)

四、实验步骤 (14)

五、实验源码 (15)

main.cpp (15)

widget.h (15)

widget.cpp (17)

六、实验结果与分析 (35)

七、教师评价 (37)

实验四:FTP:ftpTestTool (38)

一、实验目的 (38)

二、实验内容 (38)

三、实验要求 (38)

四、实验步骤 (38)

五、实验源码 (39)

main.cpp (39)

widget.h (39)

widget.cpp (41)

六、实验结果与分析 (48)

七、教师评价 (48)

实验五:TCP服务器:timeService (49)

一、实验目的 (49)

二、实验内容 (49)

三、实验要求 (49)

四、实验步骤 (49)

五、实验源码 (50)

main.cpp (50)

timeService.h (50)

timeService.cpp (51)

七、教师评价 (52)

实验六:TCP:timeClient (53)

一、实验目的 (53)

二、实验内容 (53)

三、实验要求 (53)

四、实验步骤 (53)

五、实验源码 (54)

main.cpp (54)

widget.h (54)

widget.cpp (55)

timeClient.h (56)

timeClient.cpp (57)

六、实验结果与分析 (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

#defineDOORBELL_H

#include

#include

#include

#include

#include

#include

#include

class BellEvent:public QEvent

{

public:

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_OBJECT

public:

Ringer(BellThread*t);

publicslots:

void onTimeout();

private:

BellThread*m_thread;

};

class BellThread:public QThread

{

friendclass Ringer;

public:

BellThread(QObject*receiver);

protected:

void run();

private:

QPointerm_receiver;

};

class Master:public QWidget

{

Q_OBJECT

public:

Master(QWidget*parent=0);

~Master();

protected:

bool event(QEvent*e);

private:

QLabel*m_visitorLabel;

QLabel*m_movie;

};

#endif//DOORBELL_H

doorbell.cpp

#include"doorbell.h"

#include

#include

#include

#include

#include

#include

QEvent::TypeBellEvent::m_evType=QEvent::None; BellEvent::BellEvent(const QString&visitor, const QStringList&gifts)

:QEvent(eventType()),m_visitor(visitor)

,m_gifts(gifts)

{

}

QEvent::TypeBellEvent::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-"

<

QScopedPointerfirer(new Ringer(this)); exec();

}

constchar*g_vistors[5]={ "Mary","Peter","John",

"Haali","Mike"

};

constchar*g_gifts[7]={

"apple","iPadmini2","banana",

"egg","iPhone6","Bambook",

"KindleFireHD"

};

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<

gifts<

BellEvent*ev=new BellEvent(

g_vistors[qrand()%5],gifts);

QCoreApplication::postEvent(

m_thread->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("iPhone6")

||ev->m_gifts.contains("KindleFireHD"))

{

m_movie->setVisible(true);

m_movie->movie()->start();

}

else

{

m_movie->setVisible(false); m_movie->movie()->stop();

}

returntrue;

}

return QWidget::event(e);

}

doorbell.qrc

eye.gif

六、实验结果与分析

七、教师评价

实验二:高阶多线程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

#defineWIDGET_H

#include

#include

#include

#include

class Widget:public QWidget

{

Q_OBJECT

public:

Widget(QWidget*parent=0);

//~Widget();

protected:

void paintEvent(QPaintEvent*e);

protectedslots:

void onLoad();

void onFinished();

private:

QFutureWatcherm_watcher; QImage m_image;

};

#endif//WIDGET_H

widget.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");

QFuturefuture=

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

#defineWIDGET_H

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

class Widget:public QWidget

{

Q_OBJECT

public:

Widget(QWidget*parent=0);

~Widget();

protectedslots:

void onAddHttpHeaderValue();

void onStart();

void onMethodChanged(const QString&method);

void onMetaDataChanged();

void onDownloadProgress(qint64bytesReceived,qint64bytesTotal); void onUploadProgress(qint64bytesSent,qint64bytesTotal);

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_H

widget.cpp

#include"widget.h"

#include

#include

#include

#include

#include

#include

#include

staticconstchar*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"

基本运算电路实验报告

实报告 课程名称:电路与模拟电子技术实验指导老师:成绩: 实验名称:基本运算电路设计实验类型:同组学生姓名: 一、实验目的和要求: 实验目的: 1、掌握集成运算放大器组成的比例、加法和积分等基本运算电路的设计。 2、了解集成运算放大器在实际应用中应考虑的一些问题。 实验要求: 1、实现两个信号的反向加法运算 2、用减法器实现两信号的减法运算 3、用积分电路将方波转化为三角波 4、实现同相比例运算(选做) 5、实现积分运算(选做) 二、实验设备: 双运算放大器LM358 三、实验须知: 1.在理想条件下,集成运放参数有哪些特征? 答:开环电压增益很高,开环电压很高,共模抑制比很高,输入电阻很大,输入电流接近于零,输出电阻接近于零。2.通用型集成运放的输入级电路,为啥均以差分放大电路为基础? 答:(1)能对差模输入信号放大 (2)对共模输入信号抑制 (3)在电路对称的条件下,差分放大具有很强的抑制零点漂移及抑制噪声与干扰的能力。 3.何谓集成运放的电压传输特性线?根据电压传输特性曲线,可以得到哪些信 息? 答:运算放大器的电压传输特性是指输出电压和输入电压之比。4.何谓集成运放的输出失调电压?怎么解决输出失调? 答:失调电压是直流(缓变)电压,会叠 加到交流电压上,使得交流电的零线偏移 (正负电压不对称),但是由于交流电可 以通过“隔直流”电容(又叫耦合电容) 输出,因此任何漂移的直流缓变分量都不 能通过,所以可以使输出的交流信号不受 失调电压的任何影响。 专业: 姓名: 日期: 地点:紫金港东

5.在本实验中,根据输入电路的不同,主要有哪三种输入方式?在实际运用中这三种输入方式都接成何种反馈形式,以实现各种模拟运算? 答:反相加法运算电路,反相减法运算电路,积分运算电路。都为负反馈形式。 四、实验步骤: 1.实现两个信号的反相加法运算 实验电路: R′= Rl//R2//RF 电阻R'的作用:作为平衡电阻,以消除平均偏置电流及其漂移造成的运算误差 输入信号v s1v s1输出电压v o ,1kHz 0 2.减法器(差分放大电路) 实验电路: R1=R2、R F=R3 输入信号v s1v s1输出电压v o ,1kHz 0 共模抑制比850 3.用积分电路转换方波为三角波 实验电路: 电路中电阻R2的接入是为了抑制由I IO、V IO所造成的积分漂移,从而稳定运放的输出零点。 在t<<τ2(τ2=R2C)的条件下,若v S为常数,则v O与t 将近似成线性关系。 因此,当v S为方波信号并满足T p<<τ2时(T p为方波半个周期时间),则v O将转变

中间代码生成实验报告doc

中间代码生成实验报告 篇一:编译方法实验报告(中间代码生成器) 编译方法实验报告 XX年10月 一、 实验目的 熟悉算术表达式的语法分析与中间代码生成原理。 实验内容二、 (1)设计语法制导翻译生成表达式的四元式的算法; (2)编写代码并上机调试运行通过。 输入——算术表达式; 输出——语法分析结果; 相应的四元式序列。 (3)设计LL(1)分析法或LR(0)分析法的属性翻译文法,并根据这些属性翻译文 法,使用扩展的语法分析器实现语法制导翻译。 三、实验原理及基本步骤 ●算术表达式文法: G(E):E ? E ω0 T | T T ? T ω1 F | F F ? i | (E) ●文法变换:

G’(E) E ? T {ω0 T(本文来自:小草范文网:中间代码生成实验报告)} T ? F {ω1 F} F ? i | (E) ●属性翻译文法: E ? T {ω0 “push(SYN, w)” T “QUAT”} T ? F {ω1 “push(SYN, w)” F “QUAT”} F ? i “push(SEM, entry(w))” | (E) 其中: push(SYN, w) —当前单词w入算符栈SYN; push(SEM, entry(w)) —当前w在符号表中的入口值压入语义栈SEM; QUAT —生成四元式函数 i.T = newtemp; ii.QT[j] =( SYN[k], SEM[s-1], SEM[s], T); j++; iii.pop( SYN, _ ); pop( SEM, _ ); pop( SEM, _ ); push( SEM, T ); ●递归下降子程序: 数据结构:SYN —算符栈; SEM —语义栈; 四、数据结构设计 使用递归的结构进行四元式的设计,同时,运用堆栈

计算机网络基础模拟器实验报告

计算机网络模拟器实验报告 实验说明:共5个实验,其中前3个必做,后2个选做。 一、实验目的 1、掌握模拟器软件的使用方法; 2、掌握配置PC、交换机、路由器的方法; 3、掌握为交换机设置VLAN,为端口设置TRUNK的方法。 二、实验环境(请注意关闭杀毒软件) WinXP/WIN7、HW-RouteSim 2.2(软件请到BB课程 资源下载,下载后直接解压缩运行;下载前请关闭 杀毒软件) 三、实验步骤及结果 实验一:计算机和交换机基本设置 添加一个交换机,两个计算机,连接A电脑到交换机3号端口,B电脑到6号端口,双击交换机,进入终端配置: system password: [Quidway]sysname S3026 ;交换机重命名为S3026

[S3026]super password 111 ;设置特权密码为111 [S3026]quit sys password:111 [S3026]display currect-config ;查看当前所有配置[S3026]display vlan all ;查看当前VLAN设置 观察此时所有交换机端口都在同一个vlan1内。 双击小电脑A: login:root password:linux [root@PCAroot]# ? ;输入?号查看命令提示 [root@PCAroot]#ifconfig eth0 10.65.1.1 netmask 255.255.0.0 双击小电脑B: login:root password:linux [root@PCAroot]#ifconfig eth0 10.65.1.2 netmask 255.255.0.0 点击A电脑做测试: [root@PCA root]#ping 10.65.1.2

电路基础实验报告

北京交通大学电路基础实验报告

实验目的: (1)学习MultiSim2001建立电路、直流电路的分析方法。 (2)掌握伏安特性的测量。 (3)通过实验,加深对叠加定理和戴维南定理的理解。 实验内容: 1)测量二极管的伏安特性 (1)建立如右图所示的仿真Array电路。 (2)启动Simulate菜单中的 Analyses下的DC Sweep 设置相应的参数后,单击Simulate按钮,得到二极管的伏 安特性曲线。 2)验证叠加定理Array(1)建立如右图 所示的仿真电路。 (2)启动仿真开 关后,用电压表分 别测出V1、V2单 独作用和共同作 用时个支路的电压值,验证叠加定理。 3)验证戴维南定理 (1)建立如下图所示的仿真电路。(其中a对应2的位置,

b 对应0的位置) (2)用电压表测量R3断开时a 、b 端口的开路电压。 (3)将电阻R3短路,用电流表测量a 、b 端口短路电压。 (4)计算出等效电阻。重新建立一仿真电路,调出一个直流电压源,设置其电压为测量出的开路电压值,调一个电阻值为计算出的等效电阻,与R3电阻串联成一个等效电路。再用电压表和电流表测量R3两端的电压和流过电流,验证戴维南定理。 实验过程: 1) 测量二极管的伏安特性。 如右图,建立仿真电路图后,启动Simulate 菜单中的Analyses 下的DC Sweep 命令,设置相应的参数后,单击Simulate 按钮,得到二极管的伏安特性曲线如下:

2)验证叠加定理。 V1单独作用: 令V2=0.启动仿真开关如下图: U11=8.727V U21=3.273V U31=3.273V V2单独作用: 令V1=0,启动仿真开关如下图:

实验二MATLAB程序设计含实验报告

实验二M A T L A B程序设计含实验报告 集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器 (Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因c b a 、、的不同取值而定),这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。

(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 21 3105168421 63105168421 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. y 5. (Root Mean Square)的计算(1(2)x=rand(1,200),得到的x 为200个(0,1)之间均匀分布的随机数。 6.根据2 2222 1......3121116n ++++=π,求π的近似值。当n 分别取100、1000、10000时,结果是多少 思考题:

通信网络基础实验报告

通信网络基础实验 报告 学号:。。。 姓名:。。。 专业:通信工程 指导老师:孙恩昌 完成时间:2015-12-27

目录 一.实验目的 (3) 二.实验内容 (3) 三.实验原理 (3) 四.实现停等式ARQ实验过程及结果: (5) 五.实现返回n-ARQ实验过程及结果: (7) 六.实现选择重发式ARQ过程及结果: (8) 七.心得体会 (10)

一.实验目的 1.理解数据链路层ARQ协议的基本原理 2.用算法实现四种不同形式的ARQ重传协议:停等式ARQ、返回n-ARQ、选择重发式ARQ和ARPANET ARQ。 3.提高分析和解决问题的能力和提高程序语言的实现能力 二.实验内容: 1.根据停等式ARQ协议基本理论,编写协议算法,进行仿真; 2.根据返回N-ARQ协议基本理论,编写协议算法,进行仿真; 3.根据选择重传ARQ协议基本理论,编写协议算法,进行仿真; 4.根据并行等待ARQ协议基本理论,编写协议算法,进行仿真 三.实验原理 1.停等式ARQ:在开始下一帧传送出去之前,必须确保当前帧已被正确接受。假定A到B的传输链路是正向链路,则B到A的链路称为反向链路。在该链路上A要发送数据帧给B,具体的传送过程如下: 发送端发出一个包后,等待ACK,收到ACK,再发下一个包,没有收

到ACK、超时,重发 重发时,如果ACK 不编号,因重复帧而回复的ACK,可能被错认为对其它帧的确认。 2. 返回n-ARQ:发送方和接收方状态示意图 返回n-ARQ方案的特点如下: (1)发送方连续发送信息帧,而不必等待确认帧的返回; (2)在重发表中保存所发送的每个帧的备份; (3)重发表按先进先出(FIFO)队列规则操作; (4)接收方对每一个正确收到的信息帧返回一个确认帧,每一个确认帧包含一个惟一的序号,随相应的确认帧返回; (5)接收方保存一个接收次序表,包含最后正确收到的信息帧的序号。当发送方收到相应信息帧的确认后,从重发表中删除该信息帧的备份;

电路基础实验报告 日光灯功率因素改善实验

实验题目: 日光灯电路改善功率因数实验 一、实验目的 1、了解日光灯电路的工作原理及提高功率因数的方法; 2、通过测量日光灯电路所消耗的功率,学会电工电子电力拖动实验装置; 3、学会日光灯的接线方法。 二、实验原理 用P 、S 、I 、V 分别表示电路的有功功率、视在功率、总电流和电源电压。按定义电路的功率因数IU P S P = = ?cos 。由此可见,在电源电压且电路的有功功率一定时,电路的功率因数越高,它占用电源(或供电设备)的容量S 就越少。 日光灯电路中,镇流器是一个感性元件(相当于电感与电阻的串联),因此它是一个感性电路,且功率因数很低,约0.5—0.6。 提高日光灯电路(其它感性电路也是一样)功率因数的方法是在电路的输入端并联一定容量的电容器。如图7-1所示: 图7-1 图7-2 图7-1 并联电容提高功率因数电路 图7-2 并联电容后的相量图 图7-1中L 为镇流器的电感,R 为日光灯和镇流器的等效电阻,C 为并联的电容器, 设并联电容后电路总电流I ,电容支路电流C I ,灯管支路电流RL I (等于未并电容前电路中的总电流),则三者关系可用相量图如图7-2所示。由图7-2知,并联电容C 前总电流 为RL I ,RL I 与总电压U 的相位差为L ?,功率因数为L ?cos ;并联电容C 后的总电流为I ,I 与总电压U 的相位差为?,功率因数为?cos ;显然?cos >L ?cos ,功率被提高了。并联电容C 前后的有功功率??cos cos IU U I P L RL ==,即有功功率不变。并联电容C 后的 总电流I 减小,视在功率IU S =则减小了,从而减轻了电源的负担,提高了电源的利用率。 三、实验设备 电工电子电力拖动实验装置一台,型号:TH-DT 、导线若干 四、实验内容 1、功率因数测试 按照图7-3的电路 实验电路如图7-3所示,将三表测得的数据记录于表7-1中。 图7-3 日光灯实验电路 W 为功率表,C 用可调电容箱。 五、实验数据与分析 表7-1 感性电路并联电容后的原始数据 C (μF ) P(瓦) V (伏) I (安) Cos ф 0 44.7 220 0.410 0.42

青岛科技大学实验报告(实验一)

班级:姓名:学号:成绩: 实验一: Qt 开发环境的搭建 (一)实验目的: ?掌握Qt 开发环境的搭建方法 ?掌握Qt Creator 的基本使用方法 ?了解Qt Creator 的界面布局 ?了解Qt 相关工具软件 (二)实验准备 ?对Qt 及Qt Creator 有基本了解 ?了解MinGW ?下载Qt 4.8.5、Qt Creator 2.8.0 和MinGW 安装包 (三)实验内容: ?安装Qt Creator ?安装MinGW ?安装Qt ?关联Qt Creator 和Qt ?运行一个示例程序 ?查看Qt 工具 (四)实验过程 1.安装Qt Creator (1)双击运行qt-creator-windows-opensource-2.8.0.exe 安装包,将出现如图1.1 所示的安装向导界面。单击“下一步”按钮。

图1.1 Qt Creator 安装向导 (2)选择安装位置界面如图1.2 所示。这里默认安装在C 盘,选中“Associate common filetypes with Qt Creator”选项会为Qt Creator 关联相应类型的文件,以后双击相应类型的文件(如Qt 项目文件)可直接在Qt Creator 中打开。这里保持默认设置,单击“下一步”按钮。 图1.2 选择安装位置 (3)在如图 1.3 所示的“许可协议”界面,选择“我接受此许可”即可。然后单击“下一步”按钮。 图1.3 许可协议界面

(4)在设置“开始菜单快捷方式”界面,可以在系统开始菜单中创建Qt Creator 的快捷方式,可以选择显示的位置和更改显示名称。如图1.4 所示。这里保持默认即可。单击“下一步”按钮。 图1.4 设置开始菜单快捷方式 (5)在“已做好安装准备”界面,单击“安装”按钮开始安装。如图1.5 所示。 图1.5 已做好安装准备界面 (6)完成安装。在完成安装界面,单击“完成”按钮结束安装。因为默认勾选了“Launch Qt Creator”,所以完成安装后会自动运行Qt Creator。如图1.6 所示。

c计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始化和完善各控件 的响应函数代码。

(3)程序清单: 添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法 2.减法 3.乘法 4.除法 int append; //判断后面是否添加数字 成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0;

电路基础实验报告

基尔霍夫定律和叠加定理的验证 组长:曹波组员:袁怡潘依林王群梁泽宇郑勋 一、实验目的 通过本次实验验证基尔霍夫电流定律和电压定律加深对“节点电流代数和”及“回路电压代数和”的概念的理解;通过实验验证叠加定理,加深对线性电路中可加性的认识。 二、实验原理 ①基尔霍夫节点电流定律[KCL]:在集总电路中,任何时刻,对任一结点,所有流出结点的支路电流的代数和恒等于0。 ②基尔霍夫回路电压定律[KVL]:在集总电路中,任何时刻,沿任一回路,所有支路电压的代数和恒等于0。 ③叠加定理:在线性电阻电路中,某处电压或电流都是电路中各个独立电源单独作用时,在该处分别产生的电压或电流的叠加。 三、实验准备 ①仪器准备 1.0~30V可调直流稳压电源 2.±15V直流稳压电源 3.200mA可调恒流源 4.电阻 5.交直流电压电流表 6.实验电路板 7.导线

②实验电路图设计简图 四、实验步骤及内容 1、启动仪器总电源,连通整个电路,分别用导线给电路中加上直流电压U1=15v,U2=10v。 2、先大致计算好电路中的电流和电压,同时调好各电表量程。 3、依次用直流电压表测出电阻电压U AB、U BE、U ED,并记录好电压表读数。 4、再换用电流表分别测出支路电流I1、I2、I3,并记录好电流读数。 5、然后断开电压U2,用直流电压表测出电阻电压U、BE,用电流表分别测出支路电流I、1并记录好电压表读数。 6、然后断开电压U1,接通电压U2,用直流电压表测出电阻电压U、、BE,用电流表分别测出支路电流I、、1并记录好电压表读数。 7、实验完毕,将各器材整理并收拾好,放回原处。 实验过程辑录 图1 测出U AB= 图2 测出电压U BE=

QT拼图实验报告

拼图游戏 1. 文档介绍 本文档主要介绍了一个简单的拼图游戏的开发过程 2. 系统概述 就是一个简单的拼图游戏,将一幅图片随机打散,然后拼出原图,很简单,也没有加入时间限制,只是一个拼图游戏的核心。 3. 设计约束 本软件是用Qt开发出来的,Qt一个c++的gui类库,可以跨多种操作系统平台。除了Qt库,还用到的就是标准的c程序库,各个系统中的开发环境也都有。基于这两点,所以我开发出来的拼图游戏可以跨平台移植而不用修改代码,直接在目标平台上再重新编译一下就行了。另外,我开发的只是一个拼图游戏的核心。有很强的可扩展性,可以根据不同的需要而加入代码进行定制。拼图中用到的图像分割和随机打散算法都是比较高效的。鼠标点击图像块进行图像的交换,非常易用,对用户来说,非常清晰。 4. 开发与运行环境 ●操作系统:Windows7 32位旗舰版Service Pack 1 ●处理器:Pentium(R) Dual-Core CPU E6300 @ 2.8GHz 2.8GHz ●安装内存(RAM): 2.00GB ●编译器:minGW移植到windows下的gcc编译器 ●调试器:minGW移植到windows下的gdb调试器 ●Make:minGW中的mingw32-make ●Qt C++ GUI库 ●软件开发成功后拿到windowx xp和其他windows 7下运行毫无问题。

5. 软件的总体结构图 图1 程序总流程图

5.1 随机打散图片 图2 随机打散图片

5.2 拼图流程 图3 拼图流程

6. 功能模块设计 对于一个拼图游戏的核心来说,主要的模块就是图片的随机打散模块和拼图模块。我将屏幕窗口分成9块,如下图所示: 图4 屏幕窗口 6.1 图像随机分割 我们将图像也分成和屏幕窗口一样的9块,如下图所示: 图5 图像分割 在Qt中,视口是物理坐标系下指定的任意矩形,窗口指的是同一矩形,只不过是逻辑坐标系下的。我们先将视口设置成屏幕上的一块,然后窗口设置成一块大小和一块图像的大小一样的矩形,我们将一块图像绘制到窗口中,经过窗口-视口变换后就绘制到了视口所对应的屏幕上。

QT应用程序设计

南昌航空大学实验报告 二00 一四年五月十四日 课程名称:嵌入式系统设计及应用实验名称:QT应用程序设计 班级:姓名:同组人: 指导教师评定:签名: 一、实验内容 1. 阅读QT主窗口程序helloworld.cpp,然后编译并运行。 2.在helloworld.cpp程序中增加一个名为“hello”的按钮。 3. 编写一个登陆对话窗程序 二、实验步骤 (一)helloword程序 1.我们用File->New菜单来新建工程。 2这里我们选择Qt4 Gui Application。 3下面输入工程名和要保存到的文件夹路径。我们这里的工程名为helloworld。 4这时软件自动添加基本的头文件,因为这个程序我们不需要其他的功能,所以直接点击Next。 5.我们将base class选为QDialog对话框类。然后点击Next。 6点击Finish,完成工程的建立。 7我们可以看见工程中的所有文件都出现在列表中了。我们可以直接按下下面的绿色的run按钮或者按下Ctrl+R快捷键运行程序。 (二)登陆对话框程序 1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为 Base class,这样便建立了主窗口 2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中 3.在logindlg.ui中设计下面的界面:行输入框为Line Edit。其中用户名后面的输入 框在属性中设置其object Name为usrLineEdit,密码后面的输入框为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。 4.将exitBtn的单击后效果设为退出程序,关联如下: 5.右击登录按钮选择go to slot,再选择clicked(),然后进入其单击事件的槽函数,写 入一句 void loginDlg::on_loginBtn_clicked()

BCD计数器实验报告

程序代码: module counter(sa,sb,ma,mb,ha,hb,clk,clear,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,clkout); input clk,clear; output sa,sb,ma,mb,ha,hb,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,clkout; reg [3:0]sa,sb,ma,mb,ha,hb; reg [6:0]HEX0,HEX1,HEX2,HEX3,HEX4,HEX5; reg clkout; reg [30:0]i; always @(posedge clk) begin if(i===13499999) begin i=0; clkout=~clkout; end else i=i+1; end always @(posedge clear or negedge clkout) begin if(clear) begin sa<=4'b0; sb<=4'b0; ma<=4'b0; mb<=4'b0; ha<=4'b0; hb<=4'b0; end else if((ha==4)&(hb==2)) begin ha<=4'b0; hb<=4'b0; end else if(ha>9)

begin ha<=4'b0; hb<=hb+1; end else if((ma==9)&(mb==5)) begin ma<=4'b0; mb<=4'b0; ha<=ha+1; end else if(ma>9) begin ma<=4'b0; mb<=mb+1; end else if((sb==5)&(sa==9)) begin ma<=ma+1; sb<=4'b0; sa<=4'b0; end else if(sa==9) begin sb<=sb+1; sa<=4'b0; end else begin sa<=sa+1; end end always@(sa or HEX0) begin case(sa) 4'b0000: HEX0=7'b1000000; 4'b0001: HEX0=7'b1111001; 4'b0010: HEX0=7'b0100100; 4'b0011: HEX0=7'b0110000; 4'b0100: HEX0=7'b0011001; 4'b0101: HEX0=7'b0010010; 4'b0110: HEX0=7'b0000010;

计算机控制基础实验报告

重庆交通大学 学生实验报告 实验课程名称机械工程控制基础 开课实验室交通装备与制造工程实训中心 学院机电与汽车工程学院年级 2012专业班机械电子工程(2)学生姓名学号 开课时间 2014 至 2015 学年第二学期

验证性设计性综合性

ans = (1/2)^n (2) ) 1.0)(8.0()(2 --=z z z z F syms z >> f=((z^2)/((z-0.8)*(z-0.1))) f = z^2/((z - 4/5)*(z - 1/10)) >> iztrans(f) ans = (8*(4/5)^n)/7 - (1/10)^n/7 实验项目 系统分析 实验时间 实验地点 90304 实验性质 验证性 设计性 综合性 教师评价: 评价教师签名: 第三章:计算机控制系统的分析 1 试求如题图 3.1所示的采样控制系统在单位阶跃信号作用下的输出响应)(*t y 。设 ) 10(*20 )(+= s s s G ,采样周期T=0.1s 。

解: gs=tf([20],[1 10 0]); gz=c2d(gs,0.1,'imp'); gzb1=gz/(gz+1); gzb2=feedback(gz,1); y=step(gzb1); step(gzb1,gzb2); 结果: 2 试求如题图3.1所示的采样控制系统在单位速度信号作用下的稳态误差。 设) 11.0(1 )(+= s s s G ,采样周期T=0.1s. 解: gs=tf([1],[0.1 1 0]); T=0.1; gz=c2d(gs,T,'imp'); gzb=feedback(gz,1); rz = tf([0.1 0],[1 -2 1],T); rz1 = zpk([0],[1 1],T,T); yz=rz*gzb; impulse(yz); t=[0:0.1:10]'; ramp=t; lsim(gzb,ramp,t) [y,t1] = lsim(gzb,ramp,t); ER = ramp - y

电路分析基础实验报告

实验一 1. 实验目的 学习使用workbench软件,学习组建简单直流电路并使用仿真测量仪表测量电压、电流。 2.解决方案 1)基尔霍夫电流、电压定理的验证。 解决方案:自己设计一个电路,要求至少包括两个回路和两个节点,测量节点的电流代数和与回路电压代数和,验证基尔霍夫电流和电压定理并与理论计算值相比较。 2)电阻串并联分压和分流关系验证。 解决方案:自己设计一个电路,要求包括三个以上的电阻,有串联电阻和并联电阻,测量电阻上的电压和电流,验证电阻串并联分压和分流关系,并与理论计算值相比较。 3.实验电路及测试数据 4.理论计算 根据KVL和KCL及电阻VCR列方程如下: Is=I1+I2, U1+U2=U3, U1=I1*R1,

U2=I1*R2, U3=I2*R3 解得,U1=10V,U2=20V,U3=30V,I1=5A,I2=5A 5. 实验数据与理论计算比较 由上可以看出,实验数据与理论计算没有偏差,基尔霍夫定理正确; R1与R2串联,两者电流相同,电压和为两者的总电压,即分压不分流; R1R2与R3并联,电压相同,电流符合分流规律。 6. 实验心得 第一次用软件,好多东西都找不着,再看了指导书和同学们的讨论后,终于完成了本次实验。在实验过程中,出现的一些操作上的一些小问题都给予解决了。 实验二 1.实验目的 通过实验加深对叠加定理的理解;学习使用受控源;进一步学习使用仿真测量仪表测量电压、电流等变量。 2.解决方案 自己设计一个电路,要求包括至少两个以上的独立源(一个电压源和一个电流源)和一个受控源,分别测量每个独立源单独作用时的响应,并测量所有独立源一起作用时的响应,验证叠加定理。并与理论计算值比较。 3. 实验电路及测试数据 电压源单独作用:

linux实验报告(QT)

Linux实验报告 学号:092201046 姓名:张攀班级:信工0901 实验时间:2012-4-26 实验地点:A4049 指导老师:雷鸿实验名称QT/E图形界面开发环境的搭建 实验目的成功搭建QT/E图形界面 一、实验题目 QT/E图形界面开发环境的搭建 二、实验内容及结果(请将相应题目代码和结果截图写在相应题目 下方) 1、[admin@localhost ~]$ su - root 密码: [root@localhost ~]# cd /mnt/hgfs/V MwareFedora14/ [root@localhost my6410]# cd qt-x11-opensource-src-4.5.3 [root@localhost qt-x11-opensource-src-4.5.3]# ./configure Which edition of Qt do you want to use ? Type 'c' if you want to use the Commercial Edition. Type 'o' if you want to use the Open Source Edition. O This is the Qt/X11 Open Source Edition. Y ou are licensed to use this software under the terms of the Lesser GNU General Public License (LGPL) versions 2.1. Y ou are also licensed to use this software under the terms of the GNU General Public License (GPL) versions 3. Type '3' to view the GNU General Public License version 3. Type 'L' to view the Lesser GNU General Public License version 2.1. Type 'yes' to accept this license offer. Type 'no' to decline this license offer. Do you accept the terms of either license? Y es for /home/admin/my6410/qt-x11-opensource-src-4.5.3/demos/arthurplugin/arthurplugin.pro Qt is now configured for building. Just run 'gmake'. Once everything is built, you must run 'gmake install'. Qt will be installed into /usr/local/Trolltech/Qt-4.5.3 To reconfigure, run 'gmake confclean' and 'configure'.

c计算器实验报告

c计算器实验报告集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、 乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 中建立一个MFC工程文件,名为calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和 单选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在中添加头文件,然后添加public成员。 7)打开文件,在构造函数中,进行成员初始化和完善各控件的 响应函数代码。 (3)程序清单: 添加的public成员: double tempvalue; 法 2.减法 3.乘法 4.除法

int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = ; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; } ●各控件响应函数代码: void CCalculatorDlg::OnButton1() //按钮“1” { // TODO: Add your control notification handler code here if(append==1)result=0;

qt课程设计实验报告

程序设计课程设计实验报告 (qt实验报告) 信息科学与技术学院 软件三班 高文博 201005070309 2011年5月

实验1:计算当初存入本金的钱数。(12题) 1.实验目的、要求 目的: 1)熟悉qt中的常用属性; 2)熟悉vbox hbox模型及怎样根据需求设计控件,边框等; 3)熟悉各个槽函数的使用,准确的将c++语言转换成qt语言,将控件功 能与函数结合起来。 要求: 1)掌握对控件的文本色,背景色等常用属性的设置。 2)掌握对控件、边框尺寸与结构的设置 3)掌握对函数的设置 2.实验设备 笔记本电脑,已安装Qt 开发环境。 3.实验内容、步骤 ●先在vc++上进行编译。 ●应用qt3.38进行编译,运行。 实验步骤: 1)根据题目需求在草纸上画出结构图; 2)根据草图用代码设计整体框架和控件; 3)在qt上运行; 4)运行成功后根据功能添加函数; 5)在头文件中添加头文件。 6)将添加的功能函数与功能控件相连; 7)分别对每个函数进行测试; 8)将整个程序在qt运行调试; 9)运行通过后给每个函数写注释; 实验代码如下所示 A (1)主框架结构代码 #include"gwbsave.h"

GwbSave::GwbSave(QWidget*parent,const char*name):QWidget(parent,name) { //?? vBox=new QVBoxLayout(this); vBox->setMargin(5); vBox->setSpacing(5); label=new QLabel("Please input the lilv:",this,"label"); vBox->addWidget(label); //?? hBox=new QHBoxLayout(this); hBox->setMargin(5); hBox->setSpacing(5); vBox->addLayout(hBox); le1=new QLineEdit(this,"le1"); hBox->addWidget(le1); //?,?? hBox2=new QHBoxLayout(this); hBox2->setMargin(5); hBox2->setSpacing(5); vBox->addLayout(hBox2); leResult=new QLineEdit(this,"leResult"); leResult->setReadOnly(true); leResult->setPaletteBackgroundColor(Qt::gray); hBox->addWidget(leResult);

JAVA计算器实验报告

实验:计算器java程序 班级:XXXXXXX 姓名:XXXXX 学号:XXXXXXXX 实验地点:XXXXX 一、实验目的: 通过制作一个计算器让我们了解到组件的运用以及如何制作一个窗口,怎么样使用各种布局管理器,怎么样注册事件的监听,以及怎么样设置按钮或者说组件的监听程序,学会使用java语言的语法规则,掌握接口的使用,了解组建的背景颜色的设置等方法。 二、实验要求: 1.编写一个java计算器程序; 2. 运用组件的方法来布局窗口,运用接口,事件监听程序来完成计算器的功能。 三,实验步骤 1、新建一个类,注册各种组件; 2、获取窗格;设置布局管理器; 3、为各个组件注册监听程序; 4、设置组件的事件监听程序; 5、运行程序,对结果进行截图; 四,设计思路: 1.界面设置布置模块: 使用了awt,swing的类里面的方法来完成界面的布置。其中,容器布置选择了BorderLayout方法来布置面板,选择了GirdLayout方法来布置按钮。 文本区域接收字符从数字按钮的监听中获得。按钮是常规思路添加到面板上。并为按钮注册监听。 2.监听程序思路: 使用tf.getText()+"n"来实现获得文本区域显示按钮字符串,n等于所设置监听的数字按钮。tf.setText()来保存并输出获得的字符串。

使用Double.parseDouble()实现文本区域字符串转换成Double 型数据来完成计算。把ft.setText()中的字符转换成数字。 使用biaozhi==n。的方法来获得启发值。完成运算符按钮的监听。构造方法,运用biaozhi=n,来完成加减乘除小数点的不同运算。 运算后获得结果flag3。ft.setText()获得值显示在文本区域上3.数字按钮输入使用循环会更加简单,减少了十个数字按钮的逐个输入,添加,注册监听 for (int i=0;i<=9;i++){ btn[i]=new Button(String.valueOf(i)); centerPanel.add(btn[i]); btn[i].addActionListener(); } 五,程序实现: package yyy; import java.awt.BorderLayout;//导入边界布局管理器类 import java.awt.Button; import java.awt.GridLayout;//导入网格布局管理器类 import java.awt.TextField;//导入文本区域类 import java.awt.event.ActionEvent;//导入事件类 import java.awt.event.ActionListener;//导入事件监听者类 import javax.swing.JButton;//导入按钮类 import javax.swing.JFrame;//导入窗体 import javax.swing.JPanel;//导入面板 public class jisuanqi8{ //新建对象,在构造函数中进行初始化 JFrame f;//新建窗体对象 JButton buttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=”

相关文档
相关文档 最新文档