QT编程基础课件.ppt

上传人(卖家):三亚风情 文档编号:2921129 上传时间:2022-06-11 格式:PPT 页数:69 大小:2.47MB
下载 相关 举报
QT编程基础课件.ppt_第1页
第1页 / 共69页
QT编程基础课件.ppt_第2页
第2页 / 共69页
QT编程基础课件.ppt_第3页
第3页 / 共69页
QT编程基础课件.ppt_第4页
第4页 / 共69页
QT编程基础课件.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

1、 2011 SCCASVIS中国科学院计算机网络信息中心中国科学院计算机网络信息中心 超超 算算 中中 心心Supercomputing Center, C N I C, C A SLINUX 高级编程QtQt程序开发入门程序开发入门田东QT 基础编程 2011 SCCASVIS2QT 基础编程 2011 SCCASVIS3QT 基础编程 2011 SCCASVIS4QT 基础编程 2011 SCCASVIS5QT 基础编程 2011 SCCASVIS6QT 基础编程 2011 SCCASVIS7QT 基础编程 2011 SCCASVIS8QT 基础编程 2011 SCCASVIS9QT 基础

2、编程 2011 SCCASVIS10内容提纲Qt 程序设计基础Qt开发环境的建立Qt界面DesignerQt 程序开发流程QT 基础编程 2011 SCCASVIS11第一部分: Qt程序设计基础QT 基础编程 2011 SCCASVIS12Qt简介 Qt是Trolltech公司的标志性产品,是一个跨平台的C+图形用户界面(GUI)工具包 Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置 Qt/Windows (Windows XP, 2000, NT 4, Me/98) Qt/Mac (Mac OS X) Qt/X11 (Lin

3、ux, Solaris, HP-UX, IRIX, AIX等) Qt对不同平台的专门API进行了专门的封装(文件处理,网络等) QT 基础编程 2011 SCCASVIS13Trolltech的双重授权模式Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权QT 基础编程 2011 SCCASVIS14Qt特征(一)面向对象Qt具有模块设计和注重软件构件或元素的可重用行的特点构件支持Qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程友好的

4、联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。并且对于初学者,其中的指南将一步步介绍如何进行Qt编程QT 基础编程 2011 SCCASVIS15Qt特征(二)便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题用户自定义使用其他的一些工具包经常会遇到这样一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的行为国际化Qt为本地化应用提供了完全的支持,所有用户界

5、面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准 QT 基础编程 2011 SCCASVIS16Qt特征(三)丰富的API函数Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件QT 基础编程 2011 SCCASVIS17Qt编程特点1.初始化在Qt应用程序中,首先要创建一

6、个QApplication对象,QApplication类负责图形用户界面应用程序的控制流和主设置,在main.cpp中定义如下:int main(int argc, char *argv) QApplication a(argc, argv); QT 基础编程 2011 SCCASVIS181.初始化QApplication包含在main()函数的事件循环体中,对所有来自Window系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束,并且提供会话管理。在Qt应用程序中,不管有多少个窗口,QApplication对象只能有一个,而且必须在其他对象之前创建。QApplicat

7、ion类中封装了很多函数,其中包括: 系统设置:setFont() 用来设置字体 事件处理:sendEvent() 用来发送事件 GUI风格:setStyles() 设置图形用户界面的风格 颜色使用:colorSpec() 用来返回颜色文件 文本处理:translate() 用来处理文本信息 创建组件:setmainWidget() 用来设置窗口的主组件 QT 基础编程 2011 SCCASVIS192.窗口的创建在Qt程序中,创建窗口比较简单,只要在main.cpp文件中为ApplicationWindow建立一个指针:ApplicationWindow *mw = new Applicat

8、onWindow();ApplicationWindow是在Application.h中定义的类,它是一个QmainWindow的继承类组件的创建需要调用相应组件的类,并在头文件中包含此类的头文件或者创建自定义类,继承以后组件类的功能#include “qpushbutton.h”3.组件的创建QT 基础编程 2011 SCCASVIS203.组件的创建class hello:public Qwidgethello类继承了Qwidget类的特征,并加入了自定义的特征功能,同样需要在头文件中包含此类的头文件在main.cpp的函数中需要创建hello类的实例,或创建QPushButton类的实例

9、,才可以使用hello h(string);QPushButton hello(“Hello,world!”,0);如果组件本身可以作为主窗口,则无需设置主窗口。在上例中,下压按钮创建时其构造函数中的第二个参数为0,表示按钮所在窗口为主窗口,不需要设置主窗口。否则需要调用QWidget成员函数setMainWidget()来进行设置QT 基础编程 2011 SCCASVIS213.组件的创建h.setMainWidget(&h);组件创建时一般是不可见的,这样的好处在于避免大量组件创建时造成的屏幕闪烁现象,要使组件可见需要调用QWidget类的成员函数show()来显示组件h.show();在

10、X程序中,敲击键盘,鼠标指针在窗口中的移动或鼠标按键动作等,都是事件在Xt中提供了提供了一种叫做回调的事件处理方式。它通过翻译表,将事件映射为相应的动作,当组件得到事件通知,就去表中找出相应的动作例程进行处理。这种机制需要应用程序注册有关组件的回调函数或普通的事件处理函数,以分发循环Xt的事件4.事件QT 基础编程 2011 SCCASVIS22Qt事件的处理过程:QApplication的事件循环体从事件队列中拾取本地窗口系统事件或其他事件,译成QEvent(),并送给QObject:event(),最后送给QWidget:event()本别对事件处理4.事件QApplicationQWid

11、get:event() QEventQObject:event()Y 等待事件 读取事件 检查事件类型 处理事件 退出事件处理循环事件处理循环部分NQT 基础编程 2011 SCCASVIS234.事件其实在Qt程序中,事件处理的方式也是回调,但与以往所不同的是,事件的发出和接收采用了信号(signal)和插槽(slot)机制,无须调用翻译表。利用信号和插槽进行对象间的通信是Qt的最主要特征之一当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signalsignal和slot机制真正实现了封装

12、的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。QT 基础编程 2011 SCCASVIS24Signal和Slot的声明(一)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:class Student : public QObject Q_OBJECTpublic: Student() myMark = 0; int mark() const return myMark; public slots: void setMark(i

13、nt newMark);signals: void markChanged(int newMark);private: int myMark;QT 基础编程 2011 SCCASVIS25Signal和Slot的声明(二)signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signalvoid Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); QT 基础编程 2011 SCCASVIS26Signal

14、和Slot的连接(一)在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal函数原形如下:bool connect ( const QObject * sender, const char * signal, const char * member ) const其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件QT 基础编程 2011 SCCASVIS27Signal和Slot的连接(二)在使用connect()函数进

15、行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar;QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) ); QT 基础编程 2011 SCCASVIS28Signal和Slot的连接方式(一)QT 基础编程 2011 SCCASVIS29Signal和Slot的连接方式(二)同一个信号连接多个插槽connect(slider, SIGNAL(va

16、lueChanged(int),spinBox, SLOT(setValue(int);connect(slider,SIGNAL(valueChanged(int),this,SLOT(updateStatusBarIndicator(int);多个信号连接到同一个插槽connect(lcd, SIGNAL(overflow(),this, SLOT(handleMathError();connect(calculator, SIGNAL(divisionByZero(),this, SLOT(handleMathError();QT 基础编程 2011 SCCASVIS30Signal和S

17、lot的连接方式(三)一个信号连接到另一个信号connect(lineEdit, SIGNAL(textChanged(const QString &), this, SIGNAL(updateRecord(const QString &);取消一个连接disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接QT 基础编程 2011 SCCASVIS31退出事件程序退出事件程序,只需要在程序结束时返回一个exec(),例如:return a.e

18、xec();其中a为QApplication的实例,当调用exec()将进入主事件的循环中,直到exit()被调用或主窗口部件被销毁QT 基础编程 2011 SCCASVIS32整个Qt应用程序的执行过程 初始化 处理事件 结束Qt应用程序Qt 库请求队列事件队列X server设备相关层计算机键盘鼠标屏幕QT 基础编程 2011 SCCASVIS333个主要的基类1.QObjectQObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下:QObject:QObject ( QObject * parent =0,const char * name = 0 ) 创建

19、带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。比如,对话框是其中的ok和cancel按钮的父对象。在上面的函数中如果parent为0则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的敞口。QT 基础编程 2011 SCCASVIS34QObject类(一)class Mandelbrot:public QObjectQ_OBJECT /需要使用需要使用signalsignal和和slotslotpublic : :Mandelbrot(QObect *parent=0, const char *name);public slots:void start();sig

20、nals:void done();private slots:void calculate();private:QTimer timer;;QT 基础编程 2011 SCCASVIS35QObject类(二)/构造初始化一个Mandelbrot对象Mandelbrot:Mandelbrot(QObject *parent=0, const char *name):QObject(parent, name)connect(&timer,SIGNAL(timeout(),SLOT(calculate();QT 基础编程 2011 SCCASVIS363个主要的基类2. QApplicationQA

21、pplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的QApplication和QWidget都是QObject类的子类QT 基础编程 2011 SCCASVIS37函数分组函数分组 系统设置 desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInter

22、val()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。 事件处理 exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。 sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilte

23、r()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。 图形用户界面风格 style()、setStyle()、polish()。 颜色使用 colorSpec()、setColorSpec()、qwsSetCustomColors()。 文本处理 setDefaultCodec()、installTranslator()、removeTranslator()、translate()。 窗口部件 mainWidget()、setMainWidget()、allWidgets()、topLevelWidg

24、ets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。 高级光标处理 hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。 X窗口系统同步 flushX()、syncX()。 对话管理 isSessionRestored()、sessionId(

25、)、commitData()、saveState()。 线程 lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。 杂项 closeAllWindows()、startingUp()、closingDown()、type()。 QT 基础编程 2011 SCCASVIS383个主要的基类3. QWidgetQWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来

26、使用其函数功能。如,QPushButton、QlistBox等都是它的子类QT 基础编程 2011 SCCASVIS39上下文上下文 函数函数 窗口函数 show()、hide()、raise()、lower()、close()。 顶级窗口 caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。 窗口内容 update()、re

27、paint()、erase()、scroll()、updateMask()。 几何形状 pos()、size()、rect()、x()、y()、width()、height()、sizePolicy()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、

28、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、setFixedSize()。 模式 isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTrack

29、ing()、isUpdatesEnabled()、setUpdatesEnabled()。 观感 style()、setStyle()、cursor()、setCursor()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。 键盘焦点函数 isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTa

30、bOrder()、setFocusProxy()。 鼠标和键盘捕获 grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、keyboardGrabber()。 事件处理器 event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、e

31、nterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。 变化处理器 enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。 系统函数 parentWidget(

32、)、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。 这是什么的帮助 customWhatsThis()。 内部核心函数 focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。 QT 基础编程 2011 SCCASVIS40一个完整的Qt程序1 #include 2 #include 3 int main(int argc, char *argv)4 5 QApplication app (argc, argv)

33、;6 QLabel *hello = new QLabel(Hello Qt/Embedded!, 0);7 app.setMainWidget(hello);8 hello-show();9 return app.exec();10 QT 基础编程 2011 SCCASVIS41第二部分:Qt 开发环境的建立QT 基础编程 2011 SCCASVIS42建立Qt开发环境Linux: Windows: Creator Eclipse Dev-C+ VCQT 基础编程 2011 SCCASVIS43建立Qt开发环境(一)Linuxa) 在终端中键入如下命令“./configure”,经过两分钟左

34、右,完成对QT库的设置,生成makefile。之后程序会提示使用“gmake install”安装。b) 按照提示,在终端键入“gmake install”。键入“yes”并回车同意使用GPL、QPL协议(QT默认安装到/usr/local/Trolltech/Qt-4.7,如果想更改安装目录,使用-prefix参数,具体如何使用,请参照其他相关文档)。c) 打开“/root/.bash_profile”文件,在其中加入“PATH=/usr/local/Trolltech/Qt-4.7/bin:$PATH”和“export PATH”两行。重新在终端中键入“qtdemo”可以打开QT的演示程序

35、,运行“designer”可以打开QT Designer,开始你的QT界面设计之旅了。 QT 基础编程 2011 SCCASVIS44建立Qt开发环境(二) Dev-C+A. 下载Dev-C+,安装很简单,一路回车就可以了B. 下载最新的安装包,minGW。在Qt安装过程中唯一需要注意的是,当安装程序要求选择mingw的路径时,直接选择Dev-Cpp的安装路径就行了a) 安装好上述两个软件后,最后还要到http:/ For Dev-Cpp Templates,下载后将其解压到Dev-Cpp的Templates文件夹下即可。这是用于在Dev-Cpp下开发Qt程序的模板资源。b) 把Qt安装目录中

36、的bin目录中的动态链接库拷贝到windows目录下QT 基础编程 2011 SCCASVIS45建立Qt开发环境(三) Visual-C+A. 安装VC2008B. 下载最新的安装包,VS2008C. Qt Visual Studio Add-in使用QT预编译的windows库,需要指定的VC开发环境,比如QT4.4 - VC2005 QT4.7 - VC2008自定义编译其他环境的QT库:configureqmakeQT 基础编程 2011 SCCASVIS46第三部分:Qt DesignerQT 基础编程 2011 SCCASVIS47Qt DesignerQt应用程序除了使用手工编写

37、代码的方式外,还可以用过Qt Desinger来完成,Qt Designer的功能十分强大,界面类似于我们常用的VB,而且还提供了大量可供编程使用的组件QT 基础编程 2011 SCCASVIS48QT 基础编程 2011 SCCASVIS49基于Qt Designer程序设计(一)在使用Qt Designer程序开发时,一般要涉及到下面几个步骤:1.创建和初始化子部件2.设置子部件布局3.设置Tab键次序(不是必须)4.建立信号与插槽的连接QT 基础编程 2011 SCCASVIS50基于Qt Designer程序设计(二)1.创建并布置部件2.对部件使用布局管理3.建立信号与插槽的连接QT

38、 基础编程 2011 SCCASVIS51基于Qt Designer程序设计(三) 编辑两个部件之间信号与插槽之间的连接方式QT 基础编程 2011 SCCASVIS52基于Qt Designer程序设计(四)Qt Designer下不同风格的预览QT 基础编程 2011 SCCASVIS53Qt Designer的工作过程Qt Designer将工程文件组织成.ui的文件由.ui文件生成.cpp 和 .h文件 .ui -xml uic生成moc_filenaem.cpp mocQT 基础编程 2011 SCCASVIS54Qt Designer 功能框图QT 基础编程 2011 SCCASV

39、IS55子类继承方式(Qt )QT 基础编程 2011 SCCASVIS56对话框的显示1. 1.#include #include 2.2. #include #include 3.3. #include #include ui_gotocelldialog.hui_gotocelldialog.h 4.4. intint main ( main (intint argcargc, char , char * *argvargv ) )5.5. 6.6. QApplicationQApplication app ( app (argcargc, , argvargv); );7.7. Ui:

40、GoToCellDialogUi:GoToCellDialog ui ui; ;8.8. QDialog QDialog * *dialog = new QDialog;dialog = new QDialog;9.9. ui.setupUi (dialog); ui.setupUi (dialog);10.10. dialog-show ();dialog-show ();11.11. return app. exec (); return app. exec ();12.12. QT 基础编程 2011 SCCASVIS57对话框的显示QT 基础编程 2011 SCCASVIS58第四部分

41、:Qt 程序开发流程QT 基础编程 2011 SCCASVIS59一个完整的Qt程序hello1 #include 2 #include 3 int main (int argc, char *argv )4 5 QApplication app (argc, argv);6 QLabel *label = new QLabel (Hello Qt!);7 label-show ();8 return app. exec ();9 Hello Qt! QT 基础编程 2011 SCCASVIS60一个完整的Qt程序action1 #include 2 #include 3 int main (

42、int argc, char *argv ) 4 5 QApplication app (argc, argv); 6 QPushButton *button = new QPushButton (Quit); 7 QObject:connect (button, SIGNAL (clicked (), 8 &app, SLOT (quit (); 9 button-show ();10 return app. exec ();11 QT 基础编程 2011 SCCASVIS61一个完整的Qt程序layout1 #include 2 #include 3 #include 4 #include

43、 5 int main (int argc, char *argv ) 6 7QApplication app (argc, argv); 8 QWidget *window = new QWidget; 9 window-setWindowTitle (Enter Your Age);10 QSpinBox *spinBox = new QSpinBox;11 QSlider *slider = new QSlider (Qt:Horizontal);12 spinBox-setRange (0, 130);13 slider-setRange (0, 130);14 QObject:con

44、nect (spinBox, SIGNAL (valueChanged (int),15 slider, SLOT (setValue (int);16 QObject:connect (slider, SIGNAL (valueChanged (int),17 spinBox, SLOT (setValue (int);18 spinBox-setValue (50);19 QHBoxLayout *layout = new QHBoxLayout;20 layout-addWidget (spinBox);21 layout-addWidget (slider);22 window-set

45、Layout (layout);23 window-show ();24 return app. exec ();25 QT 基础编程 2011 SCCASVIS62一个完整的Qt程序QDialog 程序的源代码由两部分组成:程序的源代码由两部分组成:finddialog.h和和finddialog.cpp。QT 基础编程 2011 SCCASVIS63一个完整的Qt程序QDialog QT 基础编程 2011 SCCASVIS64一个完整的Qt程序QDialog QT 基础编程 2011 SCCASVIS65一个完整的Qt程序QDialog QT 基础编程 2011 SCCASVIS66一个完整的Qt程序QDialog QT 基础编程 2011 SCCASVIS67一个完整的Qt程序QDialog QT 基础编程 2011 SCCASVIS68Qt程序Everything! QT 基础编程 2011 SCCASVIS69

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

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

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


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

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


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