




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
讲义纲要 Qtopia集成开发环境搭建基础窗口部件Qwidget信号和槽事件处理 Qt概念 Qt是挪威Trolltech公司的旗舰产品 作为跨平台开发框架 是开源KDE桌面的基石 GoogleEarch Skype Opera AdobePhotoshopElement等著名软件都是基于Qt编写的 目前Qt最新版本为4 3 4和java的 一次编写到处运行 所不同的是 Qt是源代码级的跨平台一次编写到处编译 一次开发的Qt应用程序可以移值到不同平台 目前Qt支持的平台有 Mac WindowsNT 2000 XP Vista unix linux 嵌入式linux Qt和Qtopia之间的关系 Qt泛指Qt的所有桌面版本 比如Qt X11 QtWindows QtMac等 由于Qt最早是在Linux中随着KDE流行开来的 因此通常很多人说的Qt都指用于Linux Unix的Qt X11 Qt E Qt Embedded 是用于嵌入式Linux系统的Qt版本 Qt E去掉了XLib的依赖而直接工作于FrameBuffer上 因而效率更高 但它并不是Qt的子集 而应该是超集 部分机制 如QCOP等 不能用于Qt X11中 Qtopia是一个构建于Qt E之上的类似桌面系统的应用环境 相比之下 Qt E是基础类库 QtopiaCore 就是原来的Qt E 大概从Qt4开始改名 把QtopiaCore并到Qtopia的产品线中去了 但实际上QtopiaCore就相当于原来的Qt E 仍然作为基础类库 Qtopia安装 从网站上下载的qt文件qtopia 2 2 0 tar gz 拷贝到一个单独目录中 推荐放在opt目录下单独解压tar zxvfqtopia 2 2 0 tar gz建立两个目录arm qtopia和x86 qtopia目录把源码分别解压到两个目录中 后面我们会对其分别编译出x86仿真版和arm交叉编译版本qtpioa安装之前需要下载3个补丁包并安装后才能正确编译 Qtopia安装 编译Qt库 并且连编实例程序 教程和工具 比如Qt设计器 就像下面这样在解压目录中输入 configure qte embedded no xft qconfigqpe depths16 32 system jpeg qt zlib qt libpng gif no g exceptions no qvfb xplatformlinux arm g tslib qpe editionpda displaysize240 x320 fontfamilies helveticafixedmicrosmallsmoothsmoothtimesunifont xplatformlinux arm g luuid qt2 no opengl no xft dqt no xft thread 该命令会自动检测你目前linux操作系统具体配置情况执行make命令生成qt和qtopia 执行makeinstall系统会把编译好的所有库文件拷贝到 QPEDIR image目录下在你主机中创建如下脚本文件中设置一些环境变量如下exportQTDIR opt qte arm qtopia qtopia2 2 0 qt2exportQPEDIR opt qte arm qtopia qtopia2 2 0 qtopiaexportPATH QTDIR bin QPEDIR bin PATHexportQMAKESPEC QPEDIR mkspecs qws linux arm g exportHOME opt qte arm qtopia qtopia2 2 0 image rootexportLD LIBRARY PATH QTDIR lib QPEDIR lib LD LIBRARY PATH 有关Qt环境变量 QMAKESPEC 这个必须设置为你所使用的系统的平台和编译器的组合 举例来说 加入你使用的是Windows和MicrosoftVisualStudio 你应该把环境变量设置为win32 msvc 如果你使用Solaris和g 你应该把环境变量设置solaris g QTDIR 这个必须设置到Qt被 或者将被 安装到的地方 比如 opt qte arm qtopia qtopia2 2 0 qt2一旦环境变量被设置到qmake目录 QTDIR qmakeQPEDIR 这设置为Qtopia的实际安装目录 Qt主要开发工具 KdeveloptIDEKDelvelopt是Linux下开源IDE 目前最新版本为3 5 3 它的优点是专门为linux下编写c 的开发工具有速度快易调试等特点 但是没有代码职能感知功能Eclipse C DeveloptTool CDT qt插件Eclipse是java开发的IDE工具 它能够通过插件方式支持多种语言如 c java c 要运行Eclipse必须先安装jre 具有代码智能感知功能QdeveloptIDEQDevelop是专门用于Qt4开发的IDE环境 QDevelop基于Qt4核心 需要安装gcc编译器 windows为MinGW 还需要gdb提供调试功能和ctags实现代码补全功能 QDevelop目前支持英语 法语 德语 荷兰语 波兰语 西班牙语 中文 俄语 意大利语和乌克兰语 QDevelop是和Kdevelop无关的项目 它主要专注于提供Qt的IDE开发环境 虽然还不完善 但是发展很快 并且跨平台 QDevelop和KDevelop具有完全不同的源代码 Qt体系架构 Qt的整个设计都是以单根继承为主这跟java相同 所谓单根继承就是说所有的Qt类都有一个共同的祖先都是QObject类QObject类后面有三个大的子类分别负责不同的功能它们是 QApplicaton 类管理图形用户界面应用程序和控制台程序的控制流和主要设置QWidget 是所有用户界面对象的基类 负责管理图形界面QLayout 负责管理所有图形界面的摆放方式 qmake工程文件 工程文件里包含了qmake建立你的应用程序 或者库 插件 所需要的所有信息 你的工程所需的资源通常通过一系列的声明语句来描述 而简单的控制结构 可以实现在不同的平台和环境下 执行不同的编译流程 qmake工程文件是以 pro为扩展名 qmake概述 qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具 手写Makefile是比较困难并且容易出错的 尤其是需要给不同的平台和编译器组合写几个Makefile 使用qmake会注意所有的编译器和平台的依赖性 可以把开发者解放出来只关心他们的代码 Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具 当Qt被连编的时候 默认情况下qmake也会被连编 qmake使用储存在项目 pro 文件中的信息来决定Makefile文件中该生成什么 qmake工程文件示例 TEMPLATE appTARGET HelloworldDEPENDPATH INCLUDEPATH SOURCES hello cppHEADERS hello hFORMS charGame uitest dynmaic uiCONFIG qtwarn onreleaseCONFIG qtdebugCONFIG qtthreaddebug pro文件解释 TEMPLATE 表示最终生成得目标文件类型app表示 最终生成得可执行文件TARGET 目标名称是自动设置的 它被设置为和项目文件一样的名称 但是为了适合平台所需要的后缀 DEPENDPATH 应用程序所依赖的搜索路径INCLUDEPATH 应用程序所需的额外的包含路径的列表SOURCES 应用程序得源代码HEADERS 应用程序用到的头文件FORMS 应用程序用到的ui窗体文件CONFIG 包含Qt连接编译得一些配置信息包括 qtwarn on 编译器会输出尽可能多的警告信息qtwarn off 编译器会输出尽可能少的警告信息qtdebug 应用程序将以debug模式连编 qtthreaddebug 连编为一个可调试的多线程的应用程序 Qt2包含的模块 QtCore和图形无关的核心模块QtGui所有的图形模块QtNetWork网络相关的模块QtOpenGL支持OpenGLQtSqlQT支持数据库开发模块QtSvg定义和生成SVG类QtXML读取XML文件模块QtDesignerQt的图形界面设计QtUiTool定义在应用程序中直接处理ui文件的类Qt3SupportQt3版本的支持QtAssistant定义和扩展Qt设计器的类 qmake命令 qmake可以根据实际文件自动生成相对应makefile文件 命令格式 qmake options files Qt体系架构图 qmake编译Qt次序 首先使用qmake project选项命令 根据当前源代码生成后缀名为pro的工程文件其次再次调用qmake命令或者执行qmake oMakefilehelloworld pro自动生成Makefile文件 Qtopia添加线程支持 由于qtopia2 2 0的makefile里的问题 现在只能自己手动编译出支持thread的libqte mt so 进入qtopia 2 2 0 FriendlyARM qt2目录手动配置来支持multi thread如果编译的是x86版本那么执行 configure embedded no xft qconfigqpe depths16 32 system jpeg gif thread如果编译的是arm版本那么执行 configure embedded no xft qconfigqpe depths16 32 system jpeg qt zlib qt libpng gif no g exceptions no qvfb xplatformlinux arm g tslib thread上面的步骤执行后会在当前目录下产生src mt mk文件 用编辑器将其内容的最后一行 cdsrc MAKE clean 删除或注释掉编译libqte mt makesrc mt编译完成后将在qtopia 2 2 0 FriendlyARM qtopia lib目录下生成所期待的libqte mt so 文件 Qt布局管理器 绝对位置方式 这种方式是通过QWidge提供的setGeometry 函数来设置子窗口部件大小和在父窗口的位置但是绝对位置方式缺点是 如果父窗口大小发生改变 子窗口部件无法做出相应变化 setGeometry 函数 指定子部件在父窗体中所处的位置和大小voidQWidget setGeometry intx inty intw inth 参数说明 x 表示子部件在父窗体行的位置y 表示子部件在父窗体列的位置w 表示子部件宽度h 表示子部件的高度 绝对位置示例 include include includeintmain intargc char argv QApplicationapp argc argv QWidget widget newQWidget QLabel label newQLabel HelloQt widget label setGeometry 10 10 20 20 widget resize 300 300 widget show returnapp exec 布局管理器类图 QObject QGridLayout QVBoxLayout QBoxLayout QHBoxLayout QLayout 布局管理器常用方法 setLayout函数 通过调用该函数设置窗口的布局模式setLayoutaddWidgetaddColSpacingsetSpacing QHBoxLayout include include includeintmain intargc char argv QApplicationapp argc argv QWidget window newQWidget QPushButton button1 newQPushButton OK QPushButton button2 newQPushButton cancel window setWindowTitle EnterYourAge QHBoxLayout layout newQHBoxLayout layout addWidget button1 layout addWidget button2 window setLayout layout window show returnapp exec QVBoxLayout include include include include includeintmain intargc char argv QApplicationapp argc argv QWidget window newQWidget window setWindowTitle QVBoxLayout window resize 240 100 QLCDNumber lcd newQLCDNumber QObject connect slider SIGNAL valueChanged int lcd SLOT display int QVBoxLayout layout newQVBoxLayout window layout addWidget lcd layout addWidget slider window show returnapp exec QGridLayout include include includeintmain intargc char argv QApplicationapp argc argv QWidget wm newQWidget QLabel label QGridLayout grid newQGridLayout wm 3 3 grid addColSpacing 0 200 grid addColSpacing 1 100 label newQLabel one wm grid addWidget label 0 0 grid addWidget newQLabel two wm 1 0 label newQLabel three wm grid addWidget label 2 0 grid addWidget newQLabel four wm 1 1 label newQLabel five wm grid addWidget label 2 2 app setMainWidget wm wm show returnapp exec QDialog类 QDialog类是对话框窗口的基类 对话框窗口是主要用于短期任务以及和用户进行简要通讯的顶级窗口 QDialog可以是模式的也可以是非模式的 QDialog支持扩展性并且可以提供返回值 它们可以有默认按钮 对话框模式 模式对话框就是阻塞同一应用程序中其它可视窗口的输入 对话框用户必须完成这个对话框中的交互操作并且关闭了它之后才能访问应用程序中的其它任何窗口非模式对话框是和同一个程序中其它窗口操作无关的对话框 在字处理软件中查找和替换对话框通常是非模式的来允许同时与应用程序主窗口和对话框进行交互 QMessageBox静态成员 StandardButtonQMessageBox critical QWidget parent constQString caption constQString text StandardButtonsbuttons Ok StandardButtondefaultButton NoButton 打开一个标题为caption并且文本为text的严重消息框 这个对话框最多有三个按钮 intwarning QWidget parent constQString caption constQString text intbutton0 intbutton1 intbutton2 0 打开一个标题为caption并且文本为text的警告消息框 这个对话框最多有三个按钮 StandardButtoninformation QWidget parent constQString title constQString text StandardButtonsbuttons Ok StandardButtondefaultButton NoButton 打开一个标题为caption并且文本为text的信息消息框 这个对话框最多有三个按钮 QDialog常用函数 exec函数调用exec 来显示模式对话框 当用户关闭这个对话框 exec 将提供一个可用的返回值并且这时流程控制继续从调用exec 的地方进行accept 槽在使用模式对话框 隐藏模式对话框并且设置结果代码为Accepted reject 槽隐藏模式对话框并且设置结果代码为Rejected show 调用show 来显示非模式对话框 show 立即返回 Qt信号和槽概述 信号与槽作为QT的核心机制在QT编程中有着广泛的应用 本章介绍了信号与槽的一些基本概念 元对象工具以及在实际使用过程中应注意的一些问题 信号和槽机制是QT的核心机制 要精通QT编程就必须对信号和槽有所了解 信号和槽是一种高级接口 应用于对象之间的通信 它是QT的核心特性 也是QT区别于其它工具包的重要地方 信号和槽是QT自行定义的一种通信机制 它独立于标准的C C 语言 因此要正确的处理信号和槽 必须借助一个称为moc MetaObjectCompiler 的QT工具 该工具是一个C 预处理程序 它为高层次的事件处理自动生成所需要的附加代码 在所有从QObject或其子类 例如Qwidget 派生的类都能够包含信号和槽 当对象改变其状态时 信号就由该对象发射 emit 出去 这就是对象所要做的全部事情 它不知道另一端是谁在接收这个信号 这就是真正的信息封装 它确保对象被当作一个真正的软件组件来使用 槽用于接收信号 但它们是普通的对象成员函数 一个槽并不知道是否有任何信号与自己相连接 而且 对象并不了解具体的通信机制 信号和槽示意图 信号 当某个信号对其客户或所有者发生的内部状态发生改变 信号被一个对象发射 只有定义过这个信号的类及其派生类能够发射这个信号 当一个信号被发射时 与其相关联的槽将被立刻执行 就象一个正常的函数调用一样 信号 槽机制完全独立于任何GUI事件循环 如果存在多个槽与某个信号相关联 那么 当这个信号被发射时 这些槽将会一个接一个地执行 但是它们执行的顺序将会是随机的 不确定的 我们不能人为地指定哪个先执行 哪个后执行 如何编写信号 信号的声明是在头文件中进行的 QT的signals关键字指出进入了信号声明区 随后即可声明自己的信号 下面定义了三个信号 signals voidmySignal voidmySignal intx voidmySignalParam intx inty 在上面的定义中 signals是QT的关键字 而非C C 的 接下来的一行voidmySignal 定义了信号mySignal 这个信号没有携带参数 接下来的一行voidmySignal intx 定义了重名信号mySignal 但是它携带一个整形参数 这有点类似于C 中的虚函数 从形式上讲信号的声明与普通的C 函数是一样的 但是信号却没有函数体定义 另外 信号的返回类型都是void 槽 槽是普通的C 成员函数 可以被正常调用 它们唯一的特殊性就是很多信号可以与其相关联 当与其关联的信号被发射时 这个槽就会被调用 槽可以有参数 但槽的参数不能有缺省值 同普通的C 成员函数一样 槽函数也分为三种类型 即publicslots privateslots和protectedslots 槽也能够声明为虚函数 这也是非常有用的 槽函数类型 publicslots 在这个区内声明的槽意味着任何对象都可将信号与之相连接 这对于组件编程非常有用 你可以创建彼此互不了解的对象 将它们的信号与槽进行连接以便信息能够正确的传递 protectedslots 在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接 这适用于那些槽 它们是类实现的一部分 但是其界面接口却面向外部 privateslots 在这个区内声明的槽意味着只有类自己可以将信号与之相连接 这适用于联系非常紧密的类 如何编写槽 槽的声明也是在头文件中进行的 例如 下面声明了三个槽 publicslots voidmySlot voidmySlot intx voidmySignalParam intx inty QObject connect 通过调用QObject对象的connect函数来将某个对象的信号与另外一个对象的槽函数相关联 这样当发射者发射信号时 接收者的槽函数将被调用 该函数的定义如下 boolQObject connect constQObject sender constchar signal constQObject receiver constchar member static 这个函数的作用就是将发射者sender对象中的信号signal与接收者receiver中的member槽函数联系起来 当指定信号signal时必须使用QT的宏SIGNAL 当指定槽函数时必须使用宏SLOT 如果发射者与接收者属于同一个对象的话 那么在connect调用中接收者参数可以省略 带有信号和槽的类 classTsignalApp publicQMainWindow Q OBJECT 信号声明区signals 声明信号mySignal voidmySignal 声明信号mySignal int voidmySignal intx 声明信号mySignalParam int int voidmySignalParam intx inty 槽声明区publicslots 声明槽函数mySlot voidmySlot 声明槽函数mySlot int voidmySlot intx 声明槽函数mySignalParam int int voidmySignalParam intx inty 一个信号与另一个信号相关联 classMyWidget publicQWidget public MyWidget signals voidaSignal private QPushButton aButton MyWidget MyWidget aButton newQPushButton this connect aButton SIGNAL clicked SIGNAL aSignal 信号和槽示例 下面定义了两个对象 标签对象label和滚动条对象scroll 并将valueChanged 信号与标签对象的setNum 相关联 另外信号还携带了一个整形参数 这样标签总是显示滚动条所处位置的值 QLabel label newQLabel QScrollBar scroll newQScrollBar QObject connect scroll SIGNAL valueChanged int label SLOT setNum int QObject disconnect 当信号与槽没有必要继续保持关联时 我们可以使用disconnect函数来断开连接 boolQObject disconnect constQObject sender constchar signal constObject receiver constchar member static 信号和槽限制 类型宏不能被用于信号和槽的参数 ifdefultrix defineSIGNEDNESS a unsigneda else defineSIGNEDNESS a a endifclassWhatever publicQObject signals voidsomeSignal SIGNEDNESS int 错误 信号和槽限制 构造函数不能用于信号部分和槽部分classSomeClass publicQObject Q OBJECTpublicslots SomeClass QObject parent constchar name QObject parent name 错误 信号和槽限制 函数指针不能作为信号或槽的参数classSomeClass publicQObject Q OBJECT publicslots voidapply void apply List void char 错误 信号和槽限制 信号和槽不能被升级QButtonGroup buttonPressed 槽是保护的 classWhatever publicQButtonGroup publicslots voidQButtonGroup buttonPressed 错的 信号和槽限制 如果一个信号与多个槽相联系的话 那么 当这个信号被发射时 与之相关的槽被激活的顺序将是随机的 信号与槽不能有缺省参数 信号与槽也不能携带模板类参数 嵌套的类不能位于信号或槽区域内也不能有信号或者槽 友元声明不能位于信号或者槽声明区内 元对象工具 元对象编译器moc metaobjectcompiler 对C 文件中的类声明进行分析并产生用于初始化元对象的C 代码 元对象包含全部信号和槽的名字以及指向这些函数的指针 元对象代码是signal slot机制所必须的 用moc产生的C 源文件必须与类实现一起进行编译和连接 或者用 include语句将其包含到类的源文件中 moc并不扩展 include或者 define宏定义 它只是简单的跳过所遇到的任何预处理指令 moc编译 moc元对象编译器的功能是把包含有信号和槽的源文件编译成特殊的文件名为moc 实际源文件名称 它的具体使用格式如下 moc option mocmysingal h omoc mysingal hoption包含如下参数 o把编译结果写到一个文件中而不是标志输出 p ppath使元对象编译器生成的 如果有生成的 include声明的文件名称中预先考虑到path qpath使元对象编译器在生成的文件中的qt include文件的名称中预先考虑到path 类声明位置 类的声明放在一个头文件 h文件 中如果在上述的文件myclass h中发现类的声明 元对象编译器的输出文件将会被放在一个叫moc myclass cpp的文件中 这个文件将会像通常情况一样被编译 作为对象文件的结果是moc myclass o类的声明放在一个实现文件 cpp文件 中如果上述的文件myclass cpp中发现类的声明 元对象编译器的输出文件将会被放在一个叫myclass moc的文件中 这个文件需要被实现文件包含 include 也就是说myclass cpp需要包含下面这行 include myclass moc 放在所有的代码之后 事件机制 Qt中定义的事件是一个从QEvent类继承下来的 它表示应用程序内部或者外部发生某些应用程序必须知道的事情在Qt内部 Qt通过由函数QApplication exec 函数启动的主事件循环从系统事件队列中抓取属于本程序事件并转化为QEvent对象 事件类图 QEvent QMouseEvent QFocusEvent QObject QKeyEvent QPaintEvent QMoveEvent QResizeEvent 事件来源分类 基于事件如何被产生与分发 可以把事件分为三类 Spontaneous事件 由窗口系统产生 它们被放到系统队列中 通过事件循环逐个处理 Posted事件 由Qt或是应用程序产生 它们被Qt组成队列 再通过事件循环处理 Sent事件 由Qt或是应用程序产生 但它们被直接发送到目标对象 QEvent对象 QEvent对象是所有事件对象的基类 因此有必要了解该对象构成函数 enumType标识事件类型Typetype const调用该函数 返回事件发生事件的类型 该类型为枚举 常用的事件类型 通过调用QEvent type函数可以返回具体事件类型 Qt已经为具体的事件类型事先定义了 QEvent MouseButtonPress 鼠标按下 QMouseEvent QEvent MouseButtonRelease 鼠标抬起 QMouseEvent QEvent MouseButtonDblClick 鼠标再次按下QEvent MouseMove 鼠标移动 QMouseEvent QEvent Close 窗口部件被关闭 永久性地 QCloseEvent QEvent KeyPress 键按下 举例 包括Shift QKeyEvent QEvent KeyRelease 键抬起 QKeyEvent QEvent FocusIn 窗口部件获得键盘焦点 QFocusEvent QEvent FocusOut 窗口部件失去键盘焦点 QFocusEvent QEvent Timer 规则的定时器事件 QTimerEvent 常用的Qt事件类 Qt为多数事件定义了特殊的类 QMouseEvent鼠标事件QKeyEvent键盘事件QResizeEvent窗体宿放事件QPaintEvent窗体重绘事件QCloseEvent窗体关闭事件QFocusEvent部件获得焦点事件 事件处理方法 Qt提供了几种处理事件的方法 重新实现特定的事件处理器重新实现QObject event 函数继承QApplication并重新实现notify 函数 实现特定的事件处理器 最常见的事件处理办法就是重载象mousePressEvent keyPressEvent paintEvent 这样的特定事件处理函数 以按键事件为例 QKeyEvent对象 QKeyEvent对象是Qt的键盘事件的包装对象 我们也经常需要捕获键盘事件 下面是该对象主要成员函数 intkey constintascii constButtonStatestate constButtonStatestateAfter constboolisAccepted constQStringtext constboolisAutoRepeat constintcount constvoidaccept voidignore Qt键盘常量 为了方便程序员捕获特殊键 Qt已经对所有的键盘都进行了宏定义 下面列出常用的键值 QMouseEvent对象 在Qt系统中对所有鼠标事件都被封装为QMouseEvent对象 有必要了解下该对象成员函数Qt MouseButtonbutton const返回发生鼠标事件时按下的鼠标按钮constQPoint globalPos const返回发生鼠标事件时 鼠标在屏幕上的位置指针intglobalX const返回发生鼠标事件时 鼠标在屏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年新疆克州州直机关遴选公务员事业单位选聘工作人员考试真题
- 2024年贵州六枝特区招聘事业单位工作人员考试真题
- 威尼斯小艇的课件课
- 工业安全技术员知识培训课件
- 平面向量的加法课件
- FGGH-生命科学试剂-MCE
- exo-α-1-2-3-Mannosidases-Bacteroides-thetaiotaomicron-生命科学试剂-MCE
- 滨州事业单位笔试真题2025
- 夷陵区安全管理培训课件
- 环保产业园2025年循环经济发展模式下的可持续发展战略报告
- 国际汉语考试题及答案
- 遥控车辆模型课件
- 企业销售业务标准作业手册
- 羽毛球合作协议合同范本
- 2025年全国计算机技术与软件专业技术资格(水平)考试系统集成项目管理工程师押题试卷
- 中国南方航空数字化和双中台方案
- 2025年通信技术认证考试-应急通信认证历年参考题库含答案解析(5套典型题)
- 韩语专业教育与职场应用能力培养融合研究
- 自贡市富顺县城乡供水一体化工程环评报告
- 2025年金属热处理原理及工艺习题一(参考答案)
- 中国慢性胃炎诊疗指南2025版
评论
0/150
提交评论