QT软件开发实验指导书.docx
- 文档编号:12784216
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:48
- 大小:501.27KB
QT软件开发实验指导书.docx
《QT软件开发实验指导书.docx》由会员分享,可在线阅读,更多相关《QT软件开发实验指导书.docx(48页珍藏版)》请在冰豆网上搜索。
QT软件开发实验指导书
QT软件开发
实验指导书
软件学院网络工程系
包晗
实验内容
实验一熟悉QT环境
【实验类型】验证性
【实验要求】必做
【实验目的】
1.了解QTSDK的下载、配置、使用。
2.熟悉开发工具QTCreator、QTDesigner的使用。
3.熟悉QT程序的基本框架。
【实验内容】
一、首先从网络上下载Qtsdk
下载地址:
下载最新版本:
qt-sdk-win-opensource-2010.03.exe。
二、点击运行QtCreator,首先出现欢迎界面,如图1.1所示。
图1.1
GUI用户界面设计(QtDesigner)界面如图1.2所示。
图1.2
三、第一个程序:
当用户在文本框里输入一个圆的半径后,点击按钮,界面上的一个标签可以显示计算后的圆的面积值。
运行效果如图1.3所示。
图1.3
参考步骤如下:
(1)单击运行QtCreator,进入欢迎界面如图1.1所示。
单击“File”“NewFileorProject...”,创建一个新的工程,如图1.4所示。
图1.4
(2)因为需要建立一个Gui项目,所以选择“Qt4GuiApplication”,单击“OK”按钮,进入下一步。
图1.5
(3)选择保存项目的路径以及定义自己项目的名字。
注意,保存项目的路径中不能有中文字。
图1.6
(4)根据实际需要,选择一个“Baseclass(基类)”。
这里选择QDialog对话框类作为基类,这时“Classname”、“Headerfile”、“Sourcefile”以及“Formfile”都出现默认的文件名。
选中“Generateform”复选框,表示需要用自带的界面设计器来设计界面,否则需要用代码来完成界面的设计。
图1.7
(5)单击“Finish”按钮完成创建,则相应的文件自动加载到文件列表中,这时程序自动进入到QtDesigner组件设计界面,根据题目要求完成界面的设计。
(6)修改各控件的属性,如图1.8
Class
text
objectName
QLabel
半径:
radiusLabel
QLineEdit
radiusLineEdit
QLabel
面积:
areaLabel_1
QLabel
areaLabel_2
QPushButton
计算
countBtn
图1.8
修改areaLabel_2的“frameShape”为Panel、“frameShadow”为Sunken
图1.9
(6)运行检查一下界面效果是否如预期,没有问题则开始编写事件,即槽函数。
右击“计算”按钮,选择“Gotoslot...”,如图1.10所示。
在弹出的对话框中选择clicked()信号,如图1.11所示。
图1.10图1.11
【参考程序】
dialog.h
#ifndefDIALOG_H
#defineDIALOG_H
#include
namespaceUi{
classDialog;}
classDialog:
publicQDialog{
Q_OBJECT
public:
Dialog(QWidget*parent=0);
~Dialog();
private:
Ui:
:
Dialog*ui;
privateslots:
//voidon_radiusLineEdit_textChanged(QString);
voidon_countBtn_clicked();
};
#endif//DIALOG_H
dialog.cpp
#include"dialog.h"
#include"ui_dialog.h"
conststaticdoublePI=3.1416;
Dialog:
:
Dialog(QWidget*parent):
QDialog(parent),
ui(newUi:
:
Dialog)
{ui->setupUi(this);
}
Dialog:
:
~Dialog()
{deleteui;
}
voidDialog:
:
on_countBtn_clicked()
{
boolok;
QStringtempStr;
QStringvalueStr=ui->radiusLineEdit->text();
intvalueInt=valueStr.toInt(&ok);
doublearea=valueInt*valueInt*PI;//计算圆面积
ui->areaLabel_2->setText(tempStr.setNum(area));
}
【思考题】
1.如果把响应事件的组件换成文本框,该如何修改代码?
2.参考书中代码,使用纯代码方式重新实现该程序。
实验二QT常用类和控件
【实验类型】验证性
【实验要求】必做
【实验目的】
1.了解分割窗口QSplitter类的使用。
2.了解停靠窗口QDockWidget类的使用。
3.了解界面布局的使用方法。
【实验内容】
实验题1.完成书中3.5.9小综合例子。
实验题2.实现一个分割窗口,整个对话框由3个窗口组成,各窗口之间的大小可随意拖动改变,效果如图2.1所示。
图2.1
【参考程序】
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
QFontfont("ZYSong18030",12);
a.setFont(font);
QTextCodec:
:
setCodecForTr(QTextCodec:
:
codecForLocale());
QSplitter*splitterMain=newQSplitter(Qt:
:
Horizontal,0);
QTextEdit*textLeft=newQTextEdit(QObject:
:
tr("LeftWidget"),splitterMain);
textLeft->setAlignment(Qt:
:
AlignCenter);
//右部分割窗口
QSplitter*splitterRight=newQSplitter(Qt:
:
Vertical,splitterMain);
splitterRight->setOpaqueResize(false);
QTextEdit*textUp=newQTextEdit(QObject:
:
tr("TopWidget"),splitterRight);
textUp->setAlignment(Qt:
:
AlignCenter);
QTextEdit*textBottom=newQTextEdit(QObject:
:
tr("BottomWidget"),splitterRight);
textBottom->setAlignment(Qt:
:
AlignCenter);
splitterMain->setStretchFactor(1,1);
splitterMain->setWindowTitle(QObject:
:
tr("Splitter"));
splitterMain->show();
//MainWindoww;
//w.show();
returna.exec();
}
实验题3.实现一个停靠窗口QDockWidget类,窗口1只可在主窗口的左边和右边停靠;窗口2只可在浮动和右部停靠两种状态间切换,并且不可移动;窗口3可实现停靠窗口的各个状态。
效果如图2.2所示。
图2.2
【参考程序】
DockWindows:
:
DockWindows(QWidget*parent)
:
QMainWindow(parent)
{
setWindowTitle(tr("DockWindows"));//设置主窗口的标题栏文字
QTextEdit*te=newQTextEdit(this);//定义一个QTextEdit对象作为主窗口
te->setText(tr("MainWindow"));
te->setAlignment(Qt:
:
AlignCenter);
setCentralWidget(te);//将此编辑框设为主窗口的中央窗体
//停靠窗口1
QDockWidget*dock=newQDockWidget(tr("DockWindow1"),this);
dock->setFeatures(QDockWidget:
:
DockWidgetMovable);//可移动
dock->setAllowedAreas(Qt:
:
LeftDockWidgetArea|Qt:
:
RightDockWidgetArea);
QTextEdit*te1=newQTextEdit();
te1->setText(tr("Window1,Thedockwidgetcanbemovedbetweendocksbytheuser"""));
dock->setWidget(te1);
addDockWidget(Qt:
:
RightDockWidgetArea,dock);
//停靠窗口2
dock=newQDockWidget(tr("DockWindow2"),this);
dock->setFeatures(QDockWidget:
:
DockWidgetClosable|QDockWidget:
:
DockWidgetFloatable);//可浮动、可关闭
QTextEdit*te2=newQTextEdit();
te2->setText(tr("Window2,Thedockwidgetcanbedetachedfromthemainwindow,""andfloatedasanindependentwindow,andcanbeclosed"));
dock->setWidget(te2);
addDockWidget(Qt:
:
RightDockWidgetArea,dock);
//停靠窗口3
dock=newQDockWidget(tr("DockWindow3"),this);
dock->setFeatures(QDockWidget:
:
AllDockWidgetFeatures);//全部特性
QTextEdit*te3=newQTextEdit();
te3->setText(tr("Window3,Thedockwidgetcanbeclosed,moved,andfloated"));
dock->setWidget(te3);
addDockWidget(Qt:
:
RightDockWidgetArea,dock);
}
实验三基本对话框
【实验类型】设计性
【实验要求】必做
【实验目的】
1.掌握标准文件对话框,标准颜色对话框,标准字体对话框,标准输入对话框,消息对话框的使用步骤。
2.了解QToolBox类的使用方法。
【实验内容】
实验题1.创建一个无ui界面的工程dialogExample,为类起名为dialog,类中实现文件对话框、颜色对话框、字体对话框;添加一个c++类,名为inputdlg,实现标准字符串输入对话框、条目选择对话框、int类型输入对话框、double类型输入对话框,分别代表一个学生的姓名、性别、年龄、成绩;添加一个c++类,名为msgboxdlg,实现Question消息框、Information消息框、Warning消息框、Critical消息框、About(关于)消息框、About(关于)Qt消息框。
实验题2.使用QToolBox类实现一个模拟QQ的界面,要求有三个组:
我的好友、陌生人和黑名单,每个组添加三个成员。
【参考程序】
Drawer:
:
Drawer(QWidget*parent,Qt:
:
WindowFlagsf)
:
QToolBox(parent,f)
{
setWindowTitle(tr("MyQQ"));//设置主窗体的标题
toolBtn1_1=newQToolButton;
toolBtn1_1->setText(tr("张三"));
toolBtn1_1->setIcon(QPixmap("11.png"));
toolBtn1_1->setIconSize(QPixmap("11.png").size());
toolBtn1_1->setAutoRaise(TRUE);
toolBtn1_1->setToolButtonStyle(Qt:
:
ToolButtonTextBesideIcon);
……
QGroupBox*groupBox1=newQGroupBox;
QVBoxLayout*layout1=newQVBoxLayout(groupBox1);//(groupBox1);
layout1->setMargin(10);//布局中各窗体的显示间距
layout1->setAlignment(Qt:
:
AlignHCenter);//布局中各窗体的显示位置
layout1->addWidget(toolBtn1_1);
layout1->addStretch();//插入一个占位符
……
this->addItem((QWidget*)groupBox1,tr("我的好友"));
实验题3.使用QprogressBar类和QProgressDialog类实现两种进度条的实现。
界面如下图:
【思考题】
1.第二题中尝试把每一个装载人头图像的按钮添加双击事件,使之弹出一个类似QQ的对话框,可以键入一些字符串?
实验四ui界面设计
【实验类型】设计性
【实验要求】必做
【实验目的】
1.掌握ui界面设计模式。
2.掌握进度条的实现。
【实验内容】
实验题1.实现一个“用户基本资料修改”的小程序,纯代码编写,熟悉布局、控件的使用及摆放。
如图2.3所示。
图2.3
【参考程序】
dialog.h
classDialog:
publicQDialog
{
Q_OBJECT
public:
Dialog(QWidget*parent=0);
private:
//左侧
QLabel*UserNameLabel;
QLabel*NameLabel;
QLabel*SexLabel;
QLabel*DepartmentLabel;
QLabel*AgeLabel;
QLabel*OtherLabel;
QLineEdit*UserNameLineEdit;
QLineEdit*NameLineEdit;
QComboBox*SexComboBox;
QTextEdit*DepartmentTextEdit;
QLineEdit*AgeLineEdit;
QGridLayout*LeftLayout;
//右侧
QLabel*HeadLabel;//右上角部分
QLabel*HeadIconLabel;
QPushButton*UpdateHeadBtn;
QHBoxLayout*TopRightLayout;
QLabel*IntroductionLabel;//右下角部分
QTextEdit*IntroductionTextEdit;
QVBoxLayout*RightLayout;
//底部
QPushButton*OkBtn;
QPushButton*CancelBtn;
QHBoxLayout*ButtomLayout;
};
dialog.cpp
Dialog:
:
Dialog(QWidget*parent)
:
QDialog(parent)
{
setWindowTitle(tr("UserInfo"));
/**************左侧******************************/
UserNameLabel=newQLabel(tr("用户名:
"));
UserNameLineEdit=newQLineEdit;
NameLabel=newQLabel(tr("姓名:
"));
NameLineEdit=newQLineEdit;
SexLabel=newQLabel(tr("性别:
"));
SexComboBox=newQComboBox;
SexComboBox->addItem(tr("女"));
SexComboBox->addItem(tr("男"));
DepartmentLabel=newQLabel(tr("部门:
"));
DepartmentTextEdit=newQTextEdit;
AgeLabel=newQLabel(tr("年龄:
"));
AgeLineEdit=newQLineEdit;
OtherLabel=newQLabel(tr("备注:
"));
OtherLabel->setFrameStyle(QFrame:
:
Panel|QFrame:
:
Sunken);
LeftLayout=newQGridLayout();
LeftLayout->addWidget(UserNameLabel,0,0);//用户名
LeftLayout->addWidget(UserNameLineEdit,0,1);
LeftLayout->addWidget(NameLabel,1,0);//姓名
LeftLayout->addWidget(NameLineEdit,1,1);
LeftLayout->addWidget(SexLabel,2,0);//性别
LeftLayout->addWidget(SexComboBox,2,1);
LeftLayout->addWidget(DepartmentLabel,3,0);//部门
LeftLayout->addWidget(DepartmentTextEdit,3,1);
LeftLayout->addWidget(AgeLabel,4,0);//年龄
LeftLayout->addWidget(AgeLineEdit,4,1);
LeftLayout->addWidget(OtherLabel,5,0,1,2);//其他
LeftLayout->setColumnStretch(0,1);
LeftLayout->setColumnStretch(1,3);
/*********右侧*********/
HeadLabel=newQLabel(tr("头像:
"));//右上角部分
HeadIconLabel=newQLabel;
QPixmapicon("37.png");//
HeadIconLabel->setPixmap(icon);//
HeadIconLabel->resize(icon.width(),icon.height());//
UpdateHeadBtn=newQPushButton(tr("更新"));
TopRightLayout=newQHBoxLayout();
TopRightLayout->setSpacing(20);
TopRightLayout->addWidget(HeadLabel);
TopRightLayout->addWidget(HeadIconLabel);
TopRightLayout->addWidget(UpdateHeadBtn);
IntroductionLabel=newQLabel(tr("个人说明:
"));//右下角部分
IntroductionTextEdit=newQTextEdit;
RightLayout=newQVBoxLayout();
RightLayout->setMargin(10);
RightLayout->addLayout(TopRightLayout);
RightLayout->addWidget(IntroductionLabel);
RightLayout->addWidget(IntroductionTextEdit);
/**********************底部*********************/
OkBtn=newQPushButton(tr("确定"));
CancelBtn=newQPushButton(tr("取消"));
ButtomLayout=newQHBoxLayout();
ButtomLayout->addStretch();
ButtomLayout->addWidget(OkBtn);
ButtomLayout->addWidget(CancelBtn);
/************************************************/
QGridLayout*mainLayout=newQGridLayout(this);
mainLayout->setMargin(15);
mainLayout->setSpacing(10);
mainLayout->addLayout(LeftLayout,0,0);
mainLayout->addLayout(RightLayout,0,1);
mainLayout->addLayout(ButtomLayout,1,0,1,2);
mainLayout->setSizeConstraint(QLayout:
:
SetFixedSize);
}
实验题2.使用QprogressBar类和QProgressDialog类实现两种进度条的实现。
界面如下图:
【思考题】
1.在实验1的基础上,使用堆栈窗体添加联系方式和详细资料界面,参考书中代码。
实验五主窗体
【实验类型】设计性
【实验要求】必做
【实验目的】
1.掌握创建菜单的步骤。
2.掌握新建文件的步骤。
3.了解文本编辑方法。
4.了解标准打印对话框的使用方法。
【实验内容
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT 软件 开发 实验 指导书