版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、概述二、信號(hào)三、槽四、信號(hào)和槽的關(guān)聯(lián)五、元對(duì)象工具六、程式樣例七、應(yīng)注意的問(wèn)題 相關(guān)資源 作者簡(jiǎn)介 作者 : 唐新華 (xhsmart) 軟件工程師 信號(hào)和槽作為 QT 的核心機(jī)制在 QT 編程中有著廣泛的應(yīng)用, 本文介紹了信號(hào)和槽的一些基 本概念、元對(duì)象工具及在實(shí)際使用過(guò)程中應(yīng)注意的一些問(wèn)題。QT 是個(gè)跨平臺(tái)的 C+ GUI 應(yīng)用構(gòu)架,他提供了豐富的窗口部件集,具有面向?qū)ο蟆⒁子?擴(kuò)展、真正的組件編程等特點(diǎn),更為引人注目的是目前 Linux 上最為流行的 KDE 桌面環(huán)境 就是建立在 QT 庫(kù)的基礎(chǔ)之上。 QT 支持下列平臺(tái): MS/WINDOWS-95 、 98、NT 和 2000;
2、UNIX/X11-Linux 、Sun Solaris、HP-UX 、Digital Unix 、IBM AIX 、SGI IRIX ;EMBEDDED- 支持 framebuffer 的 Linux 平臺(tái)。伴隨著 KDE 的快速發(fā)展和普及, QT 非常可能成為 Linux 窗口平臺(tái)上進(jìn)行軟件研發(fā)時(shí)的 GUI 最佳選擇。一、概述 信號(hào)和槽機(jī)制是 QT 的核心機(jī)制,要精通 QT 編程就必須對(duì)信號(hào)和槽有所了解。信號(hào)和槽是 一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,他是 QT 的核心特性,也是 QT 差別于其他工具包 的重要地方。信號(hào)和槽是 QT 自行定義的一種通信機(jī)制,他獨(dú)立于標(biāo)準(zhǔn)的C/C+ 語(yǔ)言,因此
3、要正確的處理信號(hào)和槽,必須借助一個(gè)稱為moc( Meta Object Compiler )的 QT 工具,該工具是個(gè) C+ 預(yù)處理程式,他為高層次的事件處理自動(dòng)生成所需要的附加代碼。 在我們所熟知的非常多 GUI 工具包中, 窗口小部件 (widget) 都有一個(gè)回調(diào)函數(shù)用于響應(yīng)他們 能觸發(fā)的每個(gè)動(dòng)作,這個(gè)回調(diào)函數(shù)通常是個(gè)指向某個(gè)函數(shù)的指針。不過(guò),在 QT 中信號(hào)和 槽取代了這些凌亂的函數(shù)指針, 使得我們編寫這些通信程式更為簡(jiǎn)潔明了。 信號(hào)和槽能攜帶 任意數(shù)量和任意類型的參數(shù), 他們是類型完全安全的, 不會(huì)像回調(diào)函數(shù)那樣產(chǎn)生 core dumps。 所有從 QObject 或其子類 (例如
4、Qwidget) 派生的類都能夠包含信號(hào)和槽。當(dāng)對(duì)象改動(dòng)其狀態(tài) 時(shí),信號(hào)就由該對(duì)象發(fā)射 (emit) 出去,這就是對(duì)象所要做的全部事情,他不知道另一端是誰(shuí) 在接收這個(gè)信號(hào)。這就是真正的信息封裝,他確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來(lái)使用。 槽用于接收信號(hào), 但他們是普通的對(duì)象成員函數(shù)。 一個(gè)槽并不知道是否有所有信號(hào)和自己相 連接。而且,對(duì)象并不了解具體的通信機(jī)制。你能將非常多信號(hào)和單個(gè)的槽進(jìn)行連接, 也能將單個(gè)的信號(hào)和非常多的槽進(jìn)行連接, 甚至于 將一個(gè)信號(hào)和另外一個(gè)信號(hào)相連接也是可能的, 這時(shí)無(wú)論第一個(gè)信號(hào)什么時(shí)候發(fā)射系統(tǒng)都將 即時(shí)發(fā)射第二個(gè)信號(hào)??傊?,信號(hào)和槽構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制。二
5、、信號(hào) 當(dāng)某個(gè)信號(hào)對(duì)其客戶或所有者發(fā)生的內(nèi)部狀態(tài)發(fā)生改動(dòng), 信號(hào)被一個(gè)對(duì)象發(fā)射。 只有定義過(guò) 這個(gè)信號(hào)的類及其派生類能夠發(fā)射這個(gè)信號(hào)。 當(dāng)一個(gè)信號(hào)被發(fā)射時(shí), 和其相關(guān)聯(lián)的槽將被即 時(shí)執(zhí)行,就象一個(gè)正常的函數(shù)調(diào)用相同。信號(hào) -槽機(jī)制完全獨(dú)立于所有 GUI 事件循環(huán)。只有 當(dāng)所有的槽返回以后發(fā)射函數(shù)( emit )才返回。如果存在多個(gè)槽和某個(gè)信號(hào)相關(guān)聯(lián),那么, 當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),這些槽將會(huì)一個(gè)接一個(gè)地執(zhí)行,不過(guò)他們執(zhí)行的順序?qū)?huì)是隨機(jī)的、 不確定的,我們不能人為地指定哪個(gè)先執(zhí)行、哪個(gè)后執(zhí)行。信號(hào)的聲明是在頭文件中進(jìn)行的, QT 的 signals 關(guān)鍵字指出進(jìn)入了信號(hào)聲明區(qū), 隨后即可聲 明自己
6、的信號(hào)。例如,下面定義了三個(gè)信號(hào):signals:void mySignal();void mySignal(int x);void mySignalParam(int x,int y);在上面的定義中,signals是QT的關(guān)鍵字,而非C/C+的。接下來(lái)的一行 void mySignal() 定 義了信號(hào) mySignal ,這個(gè)信號(hào)沒(méi)有攜帶參數(shù);接下來(lái)的一行 void mySignal(int x) 定義了重名 信號(hào)mySignal,不過(guò)他攜帶一個(gè)整形參數(shù),這有點(diǎn)類似于C+中的虛函數(shù)。從形式上講信號(hào)的聲明和普通的C+函數(shù)是相同的,不過(guò)信號(hào)卻沒(méi)有函數(shù)體定義,另外,信號(hào)的返回類型都是void,
7、不要指望能從信號(hào)返回什么有用信息。信號(hào)由 moc 自動(dòng)產(chǎn)生,他們不應(yīng)該在 .cpp 文件中實(shí)現(xiàn)。三、槽槽是普通的C+成員函數(shù),能被正常調(diào)用,他們唯一的特別性就是非常多信號(hào)能和其相關(guān)聯(lián)。 當(dāng)和其關(guān)聯(lián)的信號(hào)被發(fā)射時(shí),這個(gè)槽就會(huì)被調(diào)用。槽能有參數(shù),但槽的參數(shù)不能有缺省值。 既然槽是普通的成員函數(shù), 因此和其他的函數(shù)相同, 他們也有存取權(quán)限。 槽的存取權(quán)限決定 了誰(shuí)能夠和其相關(guān)聯(lián)。同普通的C+成員函數(shù)相同,槽函數(shù)也分為三種類型,即public slots、private slots 和 protected slots。public slots :在這個(gè)區(qū)內(nèi)聲明的槽意味著所有對(duì)象都可將信號(hào)和之相連接。這
8、對(duì)于組件編程 非常有用, 你能創(chuàng)建彼此互不了解的對(duì)象, 將他們的信號(hào)和槽進(jìn)行連接以便信息能夠正確的 傳遞。protected slots:在這個(gè)區(qū)內(nèi)聲明的槽意味著當(dāng)前類及其子類能將信號(hào)和之相連接。這適用于那些槽,他們是類實(shí)現(xiàn)的一部分,不過(guò)其界面接口卻面向外部。private slots :在這個(gè)區(qū)內(nèi)聲明的槽意味著只有類自己能將信號(hào)和之相連接。這適用于聯(lián)系非常緊密的類。槽也能夠聲明為虛函數(shù),這也是非常有用的。 槽的聲明也是在頭文件中進(jìn)行的。例如,下面聲明了三個(gè)槽:public slots: void mySlot();void mySlot(int x);void mySignalParam(i
9、nt x,int y);四、信號(hào)和槽的關(guān)聯(lián)通過(guò)調(diào)用QObject對(duì)象的connect函數(shù)來(lái)將某個(gè)對(duì)象的信號(hào)和另外一個(gè)對(duì)象的槽函數(shù)相關(guān)聯(lián), 這樣當(dāng)發(fā)射者發(fā)射信號(hào)時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下:bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) static 這個(gè)函數(shù)的作用就是將發(fā)射者sender對(duì)象中的信號(hào)signal和接收者receiver中的member槽函數(shù)聯(lián)系起來(lái)。當(dāng)指定信號(hào) signal 時(shí)必須
10、使用 QT 的宏 SIGNAL() ,當(dāng)指定槽函數(shù)時(shí)必須使 用宏SLOT()。如果發(fā)射者和接收者屬于同一個(gè)對(duì)象的話,那么在connect調(diào)用中接收者參數(shù)能省略。例如,下面定義了兩個(gè)對(duì)象:標(biāo)簽對(duì)象 label和滾動(dòng)條對(duì)象scroll,并將valueChanged()信號(hào) 和標(biāo)簽對(duì)象的setNum()相關(guān)聯(lián),另外信號(hào)還攜帶了一個(gè)整形參數(shù),這樣標(biāo)簽總是顯示滾動(dòng)條所處位置的值。QLabel *label = new QLabel;QScrollBar *scroll = new QScrollBar;QObject:connect( scroll, SIGNAL(valueChanged(int),l
11、abel, SLOT(setNum(int) );一個(gè)信號(hào)甚至能夠和另一個(gè)信號(hào)相關(guān)聯(lián),看下面的例子:class MyWidget : public QWidgetpublic:MyWidget();signals:void aSignal();private:QPushButton *aButton;MyWidget:MyWidget()aButton = new QPushButton( this );connect( aButton, SIGNAL(clicked(), SIGNAL(aSignal() );在上面的構(gòu)造函數(shù)中,MyWidget創(chuàng)建了一個(gè)私有的按鈕aButton,按鈕的單擊
12、事件產(chǎn)生的信號(hào)clicked。和另外一個(gè)信號(hào) aSignal()進(jìn)行了關(guān)聯(lián)。這樣一來(lái),當(dāng)信號(hào)clicked。被發(fā)射時(shí),信 號(hào)aSignal()也接著被發(fā)射。當(dāng)然,你也能直接將單擊事件和某個(gè)私有的槽函數(shù)相關(guān)聯(lián),然后在槽中發(fā)射aSignal()信號(hào),這樣的話似乎有點(diǎn)多余。當(dāng)信號(hào)和槽沒(méi)有必要繼續(xù)保持關(guān)聯(lián)時(shí), 我們能使用 disconnect 函數(shù)來(lái)斷開(kāi)連接。其定義如下: bool QObject:disconnect ( const QObject * sender, const char * signal,const Object * receiver, const char * member )
13、 static 這個(gè)函數(shù)斷研發(fā)射者中的信號(hào)和接收者中的槽函數(shù)之間的關(guān)聯(lián)。有三種情況必須使用 disco nn ect()函數(shù):斷開(kāi)和某個(gè)對(duì)象相關(guān)聯(lián)的所有對(duì)象。 這似乎有點(diǎn)不可理解, 事實(shí)上,當(dāng)我們?cè)谀硞€(gè)對(duì)象中定 義了一個(gè)或多個(gè)信號(hào), 這些信號(hào)和另外若干個(gè)對(duì)象中的槽相關(guān)聯(lián), 如果我們要切斷這些關(guān)聯(lián) 的話,就能利用這個(gè)方法,非常之簡(jiǎn)潔。disconnect( myObject, 0, 0, 0 )或myObject->disconnect()斷開(kāi)和某個(gè)特定信號(hào)的所有關(guān)聯(lián)。disconnect( myObject, SIGNAL(mySignal(), 0, 0 )或myObject->
14、disconnect( SIGNAL(mySignal() )斷開(kāi)兩個(gè)對(duì)象之間的關(guān)聯(lián)。disconnect( myObject, 0, myReceiver, 0 )或myObject->disconnect( myReceiver ) 在 disconnect 函數(shù)中 0 能用作一個(gè)通配符,分別表示所有信號(hào)、所有接收對(duì)象、接收對(duì)象中的所有槽函數(shù)。不過(guò)發(fā)射者sender不能為0,其他三個(gè)參數(shù)的值能等于0。五、元對(duì)象工具元對(duì)象編譯器 moc( meta object compiler )對(duì)C+文件中的類聲明進(jìn)行分析并產(chǎn)生用于初始 化元對(duì)象的C+代碼,元對(duì)象包含全部信號(hào)和槽的名字及指向這些函
15、數(shù)的指針。moc讀C+源文件,如果發(fā)現(xiàn)有Q_OBJECT宏聲明的類,他就會(huì)生成另外一個(gè) C+源文件, 這個(gè)新生成的文件中包含有該類的元對(duì)象代碼。例如,假設(shè)我們有一個(gè)頭文件mysignal.h ,在這個(gè)文件中包含有信號(hào)或槽的聲明, 那么在編譯之前 moc 工具就會(huì)根據(jù)該文件自動(dòng)生成 一個(gè)名為mysignal.moc.h的C+源文件并將其提交給編譯器;類似地,對(duì)應(yīng)于mysignal.cpp文件 moc 工具將自動(dòng)生成一個(gè)名為 mysignal.moc.cpp 文件提交給編譯器。元對(duì)象代碼是signal/slot機(jī)制所必須的。用moc產(chǎn)生的C+源文件必須和類實(shí)現(xiàn)一起進(jìn)行編 譯和連接,或用#inclu
16、de語(yǔ)句將其包含到類的源文件中。moc并不擴(kuò)展#include或#define宏定義,他只是簡(jiǎn)單的跳過(guò)所遇見(jiàn)的所有預(yù)處理指令。六、程式樣例這里給出了一個(gè)簡(jiǎn)單的樣例程式, 程式中定義了三個(gè)信號(hào)、 三個(gè)槽函數(shù),然后將信號(hào)和槽進(jìn) 行了關(guān)聯(lián),每個(gè)槽函數(shù)只是簡(jiǎn)單的彈出一個(gè)對(duì)話框窗口。讀者能用kdevelop 生成一個(gè)簡(jiǎn)單的 QT 應(yīng)用程式,然后將下面的代碼添加到相應(yīng)的程式中去。信號(hào)和槽函數(shù)的聲明一般位于頭文件中,同時(shí)在類聲明的開(kāi)始位置必須加上Q_OBJECT 語(yǔ)句,這條語(yǔ)句是不可缺少的,他將告訴編譯器在編譯之前必須先應(yīng)用moc 工具進(jìn)行擴(kuò)展。關(guān)鍵字signals指出隨后開(kāi)始信號(hào)的聲明,這里signals
17、用的是復(fù)數(shù)形式而非單數(shù),siganls沒(méi)有 public、 private、protected 等屬性,這點(diǎn)不同于slots。另外,signals、slots 關(guān)鍵字是 QT自己定義的,不是 C+中的關(guān)鍵字。信號(hào)的聲明類似于函數(shù)的聲明而非變量的聲明, 左邊要有類型,右邊要有括號(hào),如果要向槽 中傳遞參數(shù)的話,在括號(hào)中指定每個(gè)形式參數(shù)的類型,當(dāng)然,形式參數(shù)的個(gè)數(shù)能多于一個(gè)。關(guān)鍵字slots指出隨后開(kāi)始槽的聲明,這里slots用的也是復(fù)數(shù)形式。槽的聲明和普通函數(shù)的聲明相同,能攜帶零或多個(gè)形式參數(shù)。既然信號(hào)的聲明類似于普通 C+函數(shù)的聲明,那么,信號(hào)也可采用 C+中虛函數(shù)的形式進(jìn)行聲明,即同名但參數(shù)不
18、同。 例如,第一次定義的 void mySignal() 沒(méi)有帶參數(shù),而第二次定義的卻帶有參數(shù),從這里我們 能看到 QT 的信號(hào)機(jī)制是非常靈活的。信號(hào)和槽之間的聯(lián)系必須事先用conn ect函數(shù)進(jìn)行指定。如果要斷開(kāi)二者之間的聯(lián)系,能使用函數(shù) disconnect。/tsignal.h class TsignalApp:public QMainWindowQ_OBJECT/信號(hào)聲明區(qū)signals:/聲明信號(hào) mySignal()void mySignal();/聲明信號(hào) mySignal(int)void mySignal(int x);/聲明信號(hào) mySignalParam(int,int)
19、void mySignalParam(int x,int y);/槽聲明區(qū)public slots:/聲明槽函數(shù) mySlot()void mySlot();/聲明槽函數(shù) mySlot(int)void mySlot(int x);/聲明槽函數(shù) mySignalParam (int ,int)void mySignalParam(int x,int y);/tsignal.cppTsignalApp:TsignalApp()將信號(hào)mySignal()和槽mySlot()相關(guān)聯(lián) connect(this,SIGNAL(mySignal(),SLOT(mySlot();/將信號(hào) mySignal(
20、int) 和槽 mySlot(int) 相關(guān)聯(lián) connect(this,SIGNAL(mySignal(int),SLOT(mySlot(int);/將信號(hào) mySignalParam(int,int) 和槽 mySlotParam(int,int) 相關(guān)聯(lián) connect(this,SIGNAL(mySignalParam(int,int),SLOT(mySlotParam(int,int);/ 定義槽函數(shù) mySlot()void TsignalApp:mySlot()QMessageBox:about(this, ”Tsignal ”, “This is a signal/slot s
21、ample withoutparameter. ”);/ 定義槽函數(shù) mySlot(int)void TsignalApp:mySlot(int x)QMessageBox:about(this, ”Tsignal ”, “This is a signal/slot sample with one parameter. ”);/ 定義槽函數(shù) mySlotParam(int,int)void TsignalApp:mySlotParam(int x,int y)char s256;sprintf(s, ”x:%d y:%d ”,x,y);QMessageBox:about(this, ”Tsig
22、nal ”, s);void TsignalApp:slotFileNew()/發(fā)射信號(hào) mySignal()emit mySignal();/發(fā)射信號(hào) mySignal(int)emit mySignal(5);/發(fā)射信號(hào) mySignalParam(5 ,100)emit mySignalParam(5,100);七、應(yīng)注意的問(wèn)題信號(hào)和槽機(jī)制是比較靈活的, 但有些局限性我們必須了解, 這樣在實(shí)際的使用過(guò)程中做到有 的放矢,避免產(chǎn)生一些錯(cuò)誤。下面就介紹一下這方面的情況。1信號(hào)和槽的效率是非常高的,不過(guò)同真正的回調(diào)函數(shù)比較起來(lái),由于增加了靈活性,因 此在速度上還是有所損失,當(dāng)然這種損失相對(duì)來(lái)說(shuō)
23、是比較小的,通過(guò)在一臺(tái) i586-133 的機(jī) 器上測(cè)試是 10 微秒(運(yùn)行 Linux ),可見(jiàn)這種機(jī)制所提供的簡(jiǎn)潔性、靈活性還是值得的。但 如果我們要追求高效率的話,比如在實(shí)時(shí)系統(tǒng)中就要盡可能的少用這種機(jī)制。2信號(hào)和槽機(jī)制和普通函數(shù)的調(diào)用相同,如果使用不當(dāng)?shù)脑?,在程式?zhí)行時(shí)也有可能產(chǎn)生 死循環(huán)。 因此, 在定義槽函數(shù)時(shí)一定要注意避免間接形成無(wú)限循環(huán), 即在槽中再次發(fā)射所接 收到的同樣信號(hào)。例如, 在前面給出的例子中如果在mySlot() 槽函數(shù)中加上語(yǔ)句 emitmySignal() 即可形成死循環(huán)。3如果一個(gè)信號(hào)和多個(gè)槽相聯(lián)系的話,那么,當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),和之相關(guān)的槽被激活 的順序?qū)⑹?/p>
24、隨機(jī)的。4. 宏定義不能用在 signal 和 slot 的參數(shù)中。既然moc工具不擴(kuò)展#define,因此,在signals和slots中攜帶參數(shù)的宏就不能正確地工作, 如果不帶參數(shù)是能的。例如,下面的例子中將帶有參數(shù)的宏 SIGNEDNESS(a) 作為信號(hào)的參 數(shù)是不合語(yǔ)法的:#ifdef ultrix#define SIGNEDNESS(a) unsigned a#else#define SIGNEDNESS(a) a#endifclass Whatever : public QObjectsignals:void someSignal( SIGNEDNESS(a) );5. 構(gòu)造函數(shù)
25、不能用在 signals 或 slots 聲明區(qū)域內(nèi)。的確,將一個(gè)構(gòu)造函數(shù)放在 signals 或 slots 區(qū)內(nèi)有點(diǎn)不可理解,無(wú)論怎么,不能將他們放在private slots、protected slots 或 public slots 區(qū)內(nèi)。下面的用法是不合語(yǔ)法需求的:class SomeClass : public QObjectQ_OBJECTpublic slots:SomeClass( QObject *parent, const char *name ): QObject( parent, name ) / 在槽聲明區(qū)內(nèi)聲明構(gòu)造函數(shù)不合語(yǔ)法;6. 函數(shù)指針不能作為信號(hào)或槽的參
26、數(shù)。 例如,下面的例子中將 void (*applyFunction)(QList*, void*) 作為參數(shù)是不合語(yǔ)法的: class someClass : public QObjectQ_OBJECTpublic slots:void apply(void (*applyFunction)(QList*, void*), char*); /不合語(yǔ)法; 你能采用下面的方法繞過(guò)這個(gè)限制: typedef void (*ApplyFunctionType)(QList*, void*); class someClass : public QObjectQ_OBJECTpublic slots:void apply( ApplyFunctionType, char *);7. 信號(hào)和槽不能有缺省參數(shù)。既然 signal->slot 綁定是發(fā)生在運(yùn)行時(shí)刻,那么,從概念上講使用缺省參數(shù)是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度公益慈善晚會(huì)活動(dòng)策劃與實(shí)施合同4篇
- 2025年度互聯(lián)網(wǎng)內(nèi)容提供商ICP證年審全權(quán)委托服務(wù)合同3篇
- 二零二五年度生物科技研發(fā)農(nóng)民工就業(yè)服務(wù)合同4篇
- 電子商務(wù)平臺(tái)消費(fèi)者權(quán)益保護(hù)2025年度國(guó)際協(xié)調(diào)合同2篇
- 2025年度牛肝菌有機(jī)認(rèn)證與市場(chǎng)拓展合同
- 二零二五版昆明滇池度假區(qū)酒店管理合同3篇
- 二零二五年度農(nóng)業(yè)種植勞務(wù)作業(yè)承包合同范本3篇
- 2025年度塑料管材國(guó)際貿(mào)易爭(zhēng)端解決合同
- 2025年度私立學(xué)校校長(zhǎng)任期教育科研成果轉(zhuǎn)化合同
- 二零二五年度企業(yè)員工期權(quán)激勵(lì)合同范本
- 廣東省佛山市2025屆高三高中教學(xué)質(zhì)量檢測(cè) (一)化學(xué)試題(含答案)
- 人教版【初中數(shù)學(xué)】知識(shí)點(diǎn)總結(jié)-全面+九年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教案
- 四川省成都市青羊區(qū)成都市石室聯(lián)合中學(xué)2023-2024學(xué)年七上期末數(shù)學(xué)試題(解析版)
- 2024-2025學(xué)年人教版七年級(jí)英語(yǔ)上冊(cè)各單元重點(diǎn)句子
- 2025新人教版英語(yǔ)七年級(jí)下單詞表
- 公司結(jié)算資金管理制度
- 2024年小學(xué)語(yǔ)文教師基本功測(cè)試卷(有答案)
- 未成年入職免責(zé)協(xié)議書
- 項(xiàng)目可行性研究報(bào)告評(píng)估咨詢管理服務(wù)方案1
- 5歲幼兒數(shù)學(xué)練習(xí)題
- 2024年全國(guó)體育單招英語(yǔ)考卷和答案
評(píng)論
0/150
提交評(píng)論