Qt入门培训ppt课件.ppt

上传人(卖家):三亚风情 文档编号:2638088 上传时间:2022-05-13 格式:PPT 页数:112 大小:3.68MB
下载 相关 举报
Qt入门培训ppt课件.ppt_第1页
第1页 / 共112页
Qt入门培训ppt课件.ppt_第2页
第2页 / 共112页
Qt入门培训ppt课件.ppt_第3页
第3页 / 共112页
Qt入门培训ppt课件.ppt_第4页
第4页 / 共112页
Qt入门培训ppt课件.ppt_第5页
第5页 / 共112页
点击查看更多>>
资源描述

1、.Qt入门培训Qt introduction -Qt简介Qt的使用Qt深入理解Qt的应用-Qt简介简介l什么是Qt?-什么是什么是Qt?原来用作用户界面开发,现可用作所有的开发例如:Databases, XML, WebKit, multimedia, networking, OpenGL, scripting, non-GUI.”Qt 是一个用C+编写的跨平台开发框架.”-什么是什么是Qt?lQt由模块构建QtCorePhononQtXmlPatternsQtXmlQtWebKitQtSvgQtSqlQtScriptQtOpenVGQtOpenGLQtNetworkQtMultimediaQ

2、tGui-什么是什么是QT?lQt用宏(macros)和内省(introspection)扩展了C+l所有的代码仍然是简明C + +foreach (int value, intList) QObject *o = new QPustButton;o-metaObject()-className(); / 返回 ”QPushButton”connect(button, SIGNAL(clicked(), window, SLOT(close();-Qt的目的的目的l一次编写,到处编译l根据不同平台的本地观感生成相应的本地应用l简单地使用API,高开发效率,开放性,使用有趣-Qt的历史的历史19

3、901991199419992001Haavard 和Eirik灵感闪现开始设计,并提出信号和槽的概念1993开发出Qt的第一个图形核心命名为Qt,并建立“奇趣科技”1995签订第一个合同,开始快速发展。1997Qt1.2发布, 并且用于开发KDE。Qt 2.0发布Qt 3.0发布。2005Qt 4.0发布2008Nokia收购奇趣科技-Qt的跨平台的跨平台桌面平台桌面平台lWindowslMac OS XlLinux/Unix X11-Qt的跨平台的跨平台嵌入式平台嵌入式平台lWindows CElSymbianlMaemol嵌入式Linux-Qt的授权lLGPL 免费l你的应用程序可以是开

4、源的或者是不开源的l对Qt的修改,必须反馈到社区lGPL 免费l你的应用程序必须是开源的l对Qt的修改,必须反馈到社区l商业的 收费l你的应用程序可以是不开源 的l对Qt的修改,可以不开源-Qt简介Qt的使用Qt深入理解Qt的应用-Qt的代码结构的代码结构-Hello World-Qt的代码结构的代码结构-Hello World#include #include int main( int argc, char *argv ) QApplication app( argc, argv ); QLabel l( Hello World! ); l.show(); return app.exec(

5、);-Qt的代码结构的代码结构-Hello World#include #include int main( int argc, char *argv ) QApplication app( argc, argv ); QLabel l( Hello World! ); l.show(); return app.exec();-Qt的代码结构的代码结构-Hello World#include #include int main( int argc, char *argv ) QApplication app( argc, argv ); QLabel l( Hello World! ); l.

6、show(); return app.exec();-Qt的代码结构的代码结构-Hello World#include #include int main( int argc, char *argv ) QApplication app( argc, argv ); QLabel l( Hello World! ); l.show(); return app.exec();-Qt的代码结构的代码结构-Hello World#include #include int main( int argc, char *argv ) QApplication app( argc, argv ); QLab

7、el l( Hello World! ); l.show(); return app.exec();-Qt开发工具集开发工具集1.Qt Creator2.Qt Designer3.Qt Linguist4.Qt Assisant5.Qt Demos-信号信号(Signal)与槽与槽(Slot)初探初探lQT提供的一种在对象间进行通讯的技术。l动态地或松散地将事件和状态变化联系起来。l信号和槽机制是使Qt运作的元素。-信号信号(Signal)与槽与槽(Slot)初探初探 类似于windows中的消息和消息响应都是通过C+类成员函数实现的信号和槽是通过连接实现相互关联的包含信号或槽的类必须从QOb

8、ject继承-信号信号(Signal)与槽与槽(Slot)初探初探emit clicked();-信号(Signal)与槽(Slot)初探private slots: void on_addButton_clicked(); void on_deleteButton_clicked();connect(clearButton,SIGNAL(clicked(),listWidget,SLOT(clear();connect(addButton,SIGNAL(clicked(),this,SLOT(.);2xclear();-信号信号(Signal)与槽与槽(Slot)初探初探 . emit cl

9、icked(); . . emit clicked(); . . emit clicked(); . QString newText = QInputDialog:getText(this, Enter text, Text:); if( !newText.isEmpty() ) ui-listWidget-addItem(newText); foreach (QListWidgetItem *item, ui-listWidget-selectedItems() delete item; clear();-信号信号(Signal)与槽与槽(Slot)初探初探class Employee :

10、public QObjectQ_OBJECTpublic:Employee();int salary() const;public slots:void setSalary(int newSalary);signals:void salaryChanged(int newSalary);private:int mySalary;emit salaryChanged(50);信号和槽的声明:-信号信号(Signal)与槽与槽(Slot)初探初探-信号信号(Signal)与槽与槽(Slot)初探初探l 信号与槽机制只能用在继承于QObject的类。l槽可以返回值,但通过联接返回时不能有返回值,槽以

11、一个普通的函数实现,可以作为普通函数调用。l信号总是返回空,信号总是不必实现l 一个信号可以连接到多个槽,但槽的调用顺序不确定。l 信号和槽需要具有相同的参数列表;如果信号的参数比槽多,那么多余的参数会被忽略;如果参数列表不匹配,Qt会产生运行时错误信息-信号和槽 vs 回调回调(callback)是一个函数指针,当一个事件发生时被调用,任何函数都可以被安排作为回调。没有类型安全总是以直接调用方式工作信号和槽的方式更加动态一个更通用的机制更容易互连两个已存在的类相关类之间涉及更少的知识共享-用户界面设计用户界面设计l用户界面由特定的部件(widget)构建-用户界面设计用户界面设计三种方式三种

12、方式l1.绝对定位(absolute positioning )l最粗劣的方式l对部件的大小、位置进行硬编码l2. 手工布局(manual layout)l绝对位置,但通过resizeEvent()方法改变大小l3.布局管理器(layout managers)l部件放置在布局管理器中,使界面更具弹性。-布局管理器的优点?l让部件适应内容l让部件适应翻译变化l让部件适应用户设置-布局管理l几种可用的布局l布局管理器和部件“协商”各个部件大小与位置l弹簧可以用来填充空白处QGridLayoutQVBoxLayoutQHBoxLayout-布局管理器示例布局管理器示例l对话框由多层的布局管理器和部件

13、组成l两种方式:代码实现,使用设计器注意:布局管理器并不是其管理的部件的父对象-布局管理器代码实现 QVBoxLayout *outerLayout = new QVBoxLayout(this); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout-addWidget(new QLabel(Printer:); topLayout-addWidget(c=new QComboBox(); outerLayout-addLayout(topLayout); QHBoxLayout *groupLayout = new QHBoxLayou

14、t(); . outerLayout-addLayout(groupLayout); outerLayout-addSpacerItem(new QSpacerItem(.); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout-addSpacerItem(new QSpacerItem(.); buttonLayout-addWidget(new QPushButton(Print); buttonLayout-addWidget(new QPushButton(Cancel); outerLayout-addLayout(

15、buttonLayout);-布局管理器代码实现 QVBoxLayout *outerLayout = new QVBoxLayout(this); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout-addWidget(new QLabel(Printer:); topLayout-addWidget(c=new QComboBox(); outerLayout-addLayout(topLayout); QHBoxLayout *groupLayout = new QHBoxLayout(); . outerLayout-addLay

16、out(groupLayout); outerLayout-addSpacerItem(new QSpacerItem(.); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout-addSpacerItem(new QSpacerItem(.); buttonLayout-addWidget(new QPushButton(Print); buttonLayout-addWidget(new QPushButton(Cancel); outerLayout-addLayout(buttonLayout);-布局管理器布局管理器

17、代码实现代码实现 QVBoxLayout *outerLayout = new QVBoxLayout(this); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout-addWidget(new QLabel(Printer:); topLayout-addWidget(c=new QComboBox(); outerLayout-addLayout(topLayout); QHBoxLayout *groupLayout = new QHBoxLayout(); . outerLayout-addLayout(groupLayout)

18、; outerLayout-addSpacerItem(new QSpacerItem(.); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout-addSpacerItem(new QSpacerItem(.); buttonLayout-addWidget(new QPushButton(Print); buttonLayout-addWidget(new QPushButton(Cancel); outerLayout-addLayout(buttonLayout);-布局管理器布局管理器代码实现代码实现 QVBoxLa

19、yout *outerLayout = new QVBoxLayout(this); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout-addWidget(new QLabel(Printer:); topLayout-addWidget(c=new QComboBox(); outerLayout-addLayout(topLayout); QHBoxLayout *groupLayout = new QHBoxLayout(); . outerLayout-addLayout(groupLayout); outerLayout-ad

20、dSpacerItem(new QSpacerItem(.); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout-addSpacerItem(new QSpacerItem(.); buttonLayout-addWidget(new QPushButton(Print); buttonLayout-addWidget(new QPushButton(Cancel); outerLayout-addLayout(buttonLayout);-布局管理器布局管理器代码实现代码实现 QVBoxLayout *outerLayou

21、t = new QVBoxLayout(this); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout-addWidget(new QLabel(Printer:); topLayout-addWidget(c=new QComboBox(); outerLayout-addLayout(topLayout); QHBoxLayout *groupLayout = new QHBoxLayout(); . outerLayout-addLayout(groupLayout); outerLayout-addSpacerItem(new

22、QSpacerItem(.); QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout-addSpacerItem(new QSpacerItem(.); buttonLayout-addWidget(new QPushButton(Print); buttonLayout-addWidget(new QPushButton(Cancel); outerLayout-addLayout(buttonLayout);-布局管理器布局管理器代码实现代码实现 QHBoxLayout *groupLayout = new QHBoxLay

23、out(); QGroupBox *orientationGroup = new QGroupBox(); QVBoxLayout *orientationLayout = new QVBoxLayout(orientationGroup); orientationLayout-addWidget(new QRadioButton(Landscape); orientationLayout-addWidget(new QRadioButton(Portrait); groupLayout-addWidget(orientationGroup); QGroupBox *colorGroup =

24、new QGroupBox(); QVBoxLayout *colorLayout = new QVBoxLayout(colorGroup); colorLayout-addWidget(new QRadioButton(Black and White); colorLayout-addWidget(new QRadioButton(Color); groupLayout-addWidget(colorGroup);lHorizontal box, 包含 group boxes, vertical boxes, radio buttons-布局管理器布局管理器设计器设计器l可以使用设计器来建

25、立同样的结构-通用部件通用部件l Qt包含针对所有情形的大量通用部件;l 第三方控件,如QWTl 自定义控件-尺寸(尺寸(size)的策略)的策略l布局管理器是在空间和其他布局管理器之间进行协调l布局管理器提供布局结构l水平布局和垂直布局l网格布局l部件则提供l各个方向上的尺寸策略l最大和最小尺寸-尺寸的策略尺寸的策略l例子未完成!printerList-setSizePolicy(QSizePolicy:Expanding, QSizePolicy:Fixed)-尺寸的策略尺寸的策略l每一个widget有一个大小的示意,它给出了各个方向上尺寸的策略lFixed 规定了widget的尺寸lMi

26、nimum 规定了可能的最小值lMaximum 规定可能的最大值lPreferred 给出最好的值但不是必须的lExpanding 同preferred,但希望增长lMinimumExpanding 同minimum,但希望增长lIgnored 忽略规定尺寸, widget得到尽量大的空间-如果如果?l2个 preferred 相邻l1个 preferred, 1个 expandingl2个 expanding 相邻l空间不足以放置widget (fixed)-关于尺寸的更多信息关于尺寸的更多信息l可用最大和最小属性更好地控制widget的大小lmaximumSize 最大可能尺寸lminim

27、umSize 最小可能尺寸ui-pushButton-setMinimumSize(100, 150);ui-pushButton-setMaximumHeight(250);-伸缩因子伸缩因子l控制缩放时,各控件的缩放比例。-设计器介绍设计器介绍l以前设计器(Designer)是一个独立的工具,但现在是QtCreator的一个组成部分l可视化窗体编辑器l拖放部件l安排布局l进行信号连接-设计器介绍设计器介绍sources*.cppexecutablesobject files*.oheaders*.hgeneratedmoc_*.cppuser interfaces*.uiincludesc

28、ompileslinkscompilesmocs-设计器介绍设计器介绍sources*.cppexecutablesobject files*.oheaders*.hgeneratedmoc_*.cppgeneratedui_*.huser interfaces*.uiincludescompileslinkscompilesmocsuic-使用代码使用代码#ifndef WIDGET_H#define WIDGET_H#include namespace Ui class Widget;class Widget : public QWidget Q_OBJECTpublic: Widget(

29、QWidget *parent = 0); Widget();private: Ui:Widget *ui;#endif / WIDGET_HUi:Widget类的前置声明一个 Ui:Widget 类指针ui ,指向所有部件基本上一个标准的 QWidget 派生类-使用代码使用代码#include widget.h#include ui_widget.hWidget:Widget(QWidget *parent) : QWidget(parent), ui(new Ui:Widget) ui-setupUi(this);Widget:Widget() delete ui;实例化类Ui:Widg

30、et 为 ui删除 ui对象调用函数 setupUi, 生成所有父窗体 (this)的子窗体部件-使用设计器使用设计器l基本工作流程粗略地放置部件在窗体上从里到外进行布局,添加必要的弹簧进行信号连接在代码中使用l在整个过程中不断修改编辑属性l实践创造完美!-使用设计器使用设计器拖放部件拖放部件粗略地放置部件在窗体上-使用设计器使用设计器l从里到外进行布局,添加必要的弹簧121. 选中每一个 group box, 2. 应用垂直布局管理-使用设计器使用设计器l从里到外进行布局,添加必要的弹簧11. 选中label (click), 2. 选中combobox (Ctrl+click)2-使用设计

31、器使用设计器l从里到外进行布局,添加必要的弹簧11. 应用一个水平布局管理-使用设计器使用设计器l从里到外进行布局,添加必要的弹簧131. 选中2个group box并进行布局管理, 2. 添加一个水平弹簧, 3. 将弹簧和按钮放置进一个布局管理中2-使用设计器使用设计器l进行信号连接(部件之间)12341. 转到signals and slot 编辑模式, 2. 从一个部件拖放鼠标到另一个部件, 3. 选中signal and slot, 4. 在connections dock中查看结果-使用设计器使用设计器l进行信号连接(到你的代码中)1231. 在widget editing 模式中

32、2. 右击一个部件并选择 Go to slot.3. 选择一个信号来连接到你的代码-使用设计器使用设计器l在代码中使用l通过ui类成员使用所有部件class Widget : public QWidget .private: Ui:Widget *ui;void Widget:memberFunction() ui-pushButton-setText(.);-界面美化界面美化l1.子类化已有的控件类,重新实现paintEvent()、MouseEvent()等方法;l2.子类化QStyle,或者使用已经定义了的QWindowStyle等。l3.使用StyleSheet。-样式表样式表(Sty

33、leSheet)l所有的 QWidget 类都有一个 styleSheet 属性以支持跨平台样式l样式表是受启发自CSS的l它们可以用来进行高亮处理并进行许多小的修改l当然也可以用于用户界面的整体修改-样式表样式表l为一个单独的部件应用一个样式表的最简单方法是用设计器-样式表样式表l想为整个应用程序设定样式,可以使用 QApplication:setStyleSheetQLineEdit background-color: yellow QLineEdit#nameEdit background-color: yellow QTextEdit, QListView background-col

34、or: white; background-image: url(draft.png); background-attachment: scroll; QGroupBox background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E0E0E0, stop: 1 #FFFFFF); border: 2px solid gray; border-radius: 5px; margin-top: 1ex; 使用图片在Designer的编辑器中建立这些选择一个类通过对象名选择一个对象-资源文件资源文件(qrc)l将图标

35、放进一个资源文件中,Qt会将它们内嵌进可执行文件l避免调用多文件l不需要尝试确定每个特定安装风格下的图标的路径l一切都巧妙地在软件构建系统中自适应l避免部署的时候出现文件丢失的错误l可以将任何东西添加进资源文件中,不仅仅是图标,但一般是不需要修改的文件。-资源文件资源文件(qrc)l可以轻松的在QtCreator中管理资源文件l在路径和文件名前添加 : 以使用资源l或者简单地在设计器的列表中选择一个图标QPixmap pm(:/images/logo.png);-Qt的国际化的国际化l1. 确保应用程序是可翻译的:l 所用用户可见的字符串都使用tr()修饰l 根据不同的目标语言加载不同的qm的

36、文件。l2. 即使应用程序目前不需要翻译,也应该为以后的需求留出余地。-Qt国际化国际化步骤步骤l1.在代码中使用tr()修饰用户可见的字符串;l2.lupdate提取需要翻译的字符串;lTRANSLATIONS = spreadsheet_cn.ts spreadsheet_en.ts l3.使用linguist工具翻译;l4.在程序开始时加载正确的qm文件。-Qt国际化国际化加载加载qm文件文件lint main(int argc, char *argv)l l QApplication app(argc, argv);l . lQTranslator appTranslator;l ap

37、pTranslator.load(myapp_ + QLocale:system().name(), qmPath); lapp.installTranslator(&appTranslator);l . lreturn app.exec();l -Qt国际化国际化动态语言切换动态语言切换l额外的工作:1.语言切换的途径(菜单、按钮等);2.在统一的方法(RetranslateUI()内处理用户可见字符串,并在语言切换时调用该方法。3.实现changeEvent(QEvent *event) 方法lvoid JournalView:changeEvent(QEvent *event)l l i

38、f (event-type() = QEvent:LanguageChange) retranslateUi(); lQTableWidget:changeEvent(event); l -Qt简介Qt的使用Qt深入理解Qt的应用-QObject类类QObject是几乎所有Qt类和所有部件(widget)的基类。它包含很多组成Qt的机制事件信号和槽属性内存管理-QObject类类QObject 是大部分Qt 类的基类l例外的例子是:类需要作为轻量级的类,例如图元(graphical primitives)-QPen、QBrush。数据容器(QString, QList, QChar等)需要可复

39、制的类,因为QObject类是无法被复制的。-QObject类类它们可以拥有一个名字 (QObject:objectName)addButton, lineEdit_Password.它们被放置在QObject实例的一个层次上它们可以有到其他 QObject 实例的联接“QObject 的实例是单独的!”-对象数据存储对象数据存储(1) lclass Personllprivate:l string mszName; / 姓名 bool mbSex; / 性别 int mnAge; / 年龄l;c+中定义数据变量的一般方法:-/ File name: person.h/ 声明私有数据成员类型s

40、truct PersonalDataPrivate; class Personpublic: Person (); / constructorvirtual Person (); / destructorvoid setAge(const int);int getAge();private: PersonalDataPrivate* d;对象数据存储对象数据存储(2) Qt定义数据变量(Qt 2.x):/ File name: person.cppstruct PersonalDataPrivate / 定义私有数据成员类型 string mszName; / 姓名 bool mbSex; /

41、 性别 int mnAge; / 年龄;/ constructorPerson:Person () d = new PersonalDataPrivate;/ destructorPerson:Person () delete d;void Person:setAge(const int age) if (age != d-mnAge) d-mnAge = age;int Person:getAge() return d-mnAge;-元对象系统元对象系统(Meta-Object System) lQObject 类 作为每一个需要利用元对象系统的类的基类。lQ_OBJECT 宏, 定义在每一

42、个类的私有数据段,用来启用元对象功能,比如,动态属性,信号和槽。l元对象编译器moc (the Meta Object Complier)-元对象系统元对象系统(Meta-Object System)元对象系统的功能:元数据(QObject:metaObject)类名 (QObject:className)继承 (QObject:inherits)属性(setProperty和 QObject:property)信号和槽(Signal and slot)普通信息(QObject:classInfo)国际化(tr(), QObject:trUtf8()-元对象系统元对象系统(Meta-Objec

43、t System)sources*.cppexecutablesobject files*.oheaders*.h普通的普通的C+生成过程生成过程includescompileslinks-元数据通过元对象编译器(moc)在编译时组合在一起,元对象编译器用来处理Qt 的C+扩展。 moc从头文件里面获得数据。sources*.cppexecutablesobject files*.oheaders*.hgeneratedmoc_*.cppQt C+ 生成过程生成过程includescompileslinkscompilesmocs元对象系统(Meta-Object System)-元数据元数据

44、moc 找什么?class MyClass : public QObject Q_OBJECT Q_CLASSINFO(author, John Doe)public: MyClass(const Foo &foo, QObject *parent=0); Foo foo() const;public slots: void setFoo( const Foo &foo );signals: void fooChanged( Foo );private: Foo m_foo;Qt 关键字类的一般信息 Q_OBJECT宏, 通常是第一步首先确认该类继承自 Qobject (可能是间接)-内省内省

45、(Introspection)类在运行时了解它们自己的信息对实现脚本和动态语言的绑定l 有很好的支持。if (object-inherits(QAbstractItemView) QAbstractItemView *view = static_cast(widget); view-.enum CapitalsEnum Oslo, Helsinki, Stockholm, Copenhagen ;int index = object-metaObject()-indexOfEnumerator(CapitalsEnum);object-metaObject()-enumerator(index

46、)-key(object-capital();能够实现动态转换而不需要运行时类型检查( RTTI)例子:它可以将枚举值转换成更容易阅读和保存的字符串元对象了解细节-属性属性(Properties)QObject有getter和setter函数属性命名策略: color, setColor对于布尔: isEnabled, setEnabledclass QLabel : public QFrame Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText)public: QString text() const;public slots:

47、void setText(const QString &);Setter, 返回空,将值当成唯一参数Getter, 常量,返回值,没有参数-属性属性为什么使用setter 函数?可以验证设置对可能的变化作出反应void setMin( int newMin ) if( newMin m_max ) qWarning(Ignoring setMin(%d) as min max., newMin); return; .void setMin( int newMin ) . m_min = newMin; updateMinimum();-属性属性Properties为什么使用getter 函数?

48、间接的属性QSize size() const return m_size;int width() const return m_size.width();-属性属性 Q_PROPERTY(type name READ getFunction WRITE setFunction RESET resetFunction NOTIFY notifySignal DESIGNABLE bool SCRIPTABLE bool STORED bool USER bool CONSTANT FINAL)-使用属性使用属性直接获取通过元信息和属性系统在运行时发现属性QString text = label

49、-text();label-setText(Hello World!);QString text = object-property(text).toString();object-setProperty(text, Hello World);int QMetaObject:propertyCount();QMetaProperty QMetaObject:property(i);QMetaProperty:name/isConstant/isDesignable/read/write/.-动态属性动态属性在运行时给对象增加属性可以用来“标识”对象,等等。bool ret = object-s

50、etProperty(name, value);QObject:dynamicPropertyNames() const真:如果属性经过真:如果属性经过Q_PROPERTY 定义 假:如果只是动态增加假:如果只是动态增加返回一个动态属性的列表-创建自定义属性创建自定义属性class AngleObject : public QObject Q_OBJECT Q_PROPERTY(qreal angle READ angle WRITE setAngle)public: AngleObject(qreal angle, QObject *parent = 0); qreal angle() co

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Qt入门培训ppt课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|