NOKIAQT培訓(xùn)資料_第1頁
NOKIAQT培訓(xùn)資料_第2頁
NOKIAQT培訓(xùn)資料_第3頁
NOKIAQT培訓(xùn)資料_第4頁
NOKIAQT培訓(xùn)資料_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.qt的對象模型和信號槽的概念qt in educationthis work is a chinese translation of the original qt educational training materials published by nokia: 2010 nokia corporation and its subsidiary(-ies).nokia, qt and the nokia and qt logos are the registered trademarks of nokia corporation in finland and other countrie

2、s worldwide.this translation was created by communication and computer network laboratory of guangdong province, south china university of technology. 2010 communication and computer network laboratory of guangdong province, south china university of technology.the enclosed qt educational training m

3、aterials are provided under the creative commons attribution-non-commercial-share alike 2.5 license agreement. the full license text is available here: /licenses/by-nc-sa/2.5/legalcode. 此文檔內(nèi)容是由諾基亞公司發(fā)布的原創(chuàng)qt教育培訓(xùn)文檔的中文翻譯: 2010諾基亞公司及其附屬公司。nokia (諾基亞),qt以及nokia與qt商標(biāo)是nokia公司在芬蘭和全球其

4、他國家的注冊商標(biāo)。 該翻譯版本由 華南理工大學(xué)廣東省計(jì)算機(jī)網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室 創(chuàng)造。 2010 華南理工大學(xué)廣東省計(jì)算機(jī)網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室 本qt 教育培訓(xùn)材料依照署名-非商業(yè)性使用-相同方式共享 2.5許可協(xié)議(creative commons attribution-non-commercial-share alike 2.5 license agreement)發(fā)布。 完整的許可證文本可以在這里找到:/licenses/by-nc-sa/2.5/legalcode。 qobject類qobject是幾乎所有qt類和所有部件(widget)的基類。

5、它包含很多組成qt的機(jī)制事件信號和槽屬性內(nèi)存管理qobject類qobject 是大部分qt 類的基類例外的例子是:類需要作為輕量級的類,例如圖元(graphical primitives)。數(shù)據(jù)容器(qstring, qlist, qchar等)需要可復(fù)制的類,因?yàn)閝object類是無法被復(fù)制的。qobject類它們可以擁有一個名字 (qobject:objectname)它們被放置在qobject實(shí)例的一個層次上它們可以有到其他 qobject 實(shí)例的聯(lián)接例子: 在運(yùn)行時復(fù)制一個部件有意義嗎?“qobject 的實(shí)例是單獨(dú)的!”元數(shù)據(jù)(meta data)qt用c+實(shí)現(xiàn)內(nèi)省每一個 qobj

6、ect 都有一個元對象元對象涉及:類名 (qobject:classname)繼承 (qobject:inherits)屬性信號和槽普通信息(qobject:classinfo)元數(shù)據(jù)元數(shù)據(jù)通過元對象編譯器(moc)在編譯時組合在一起。sources*.cppexecutablesobject files*.oheaders*.h普通的普通的c+生成過程生成過程includescompileslinks元數(shù)據(jù)meta data元數(shù)據(jù)通過元對象編譯器(moc)在編譯時組合在一起。moc從頭文件里面獲得數(shù)據(jù)。sources*.cppexecutablesobject files*.oheaders

7、*.hgeneratedmoc_*.cppqt c+ 生成過程生成過程includescompileslinkscompilesmocs元數(shù)據(jù)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 );

8、private: foo m_foo;qt 關(guān)鍵字類的一般信息 q_object宏, 通常是第一步首先確認(rèn)該類繼承自 qobject (可能是間接)內(nèi)省(introspection)類在運(yùn)行時了解它們自己的信息對實(shí)現(xiàn)腳本和動態(tài)語言的綁定 有很好的支持。if (object-inherits(qabstractitemview) qabstractitemview *view = static_cast(widget); view-.enum capitalsenum oslo, helsinki, stockholm, copenhagen ;int index = object-metaob

9、ject()-indexofenumerator(capitalsenum);object-metaobject()-enumerator(index)-key(object-capital();能夠?qū)崿F(xiàn)動態(tài)轉(zhuǎn)換而不需要運(yùn)行時類型檢查( rtti)例子:它可以將枚舉值轉(zhuǎn)換成更容易閱讀和保存的字符串元對象了解細(xì)節(jié)屬性(properties)qobject有g(shù)etter和setter函數(shù)屬性命名策略: color, setcolor對于布爾: isenabled, setenabledclass qlabel : public qframe q_object q_property(qstring

10、text read text write settext)public: qstring text() const;public slots: void settext(const qstring &);setter, 返回空,將值當(dāng)成唯一參數(shù)getter, 常量,返回值,沒有參數(shù)屬性為什么使用setter 函數(shù)?可以驗(yàn)證設(shè)置對可能的變化作出反應(yīng)void setmin( int newmin ) if( newmin m_max ) qwarning(ignoring setmin(%d) as min max., newmin); return; .void setmin( int

11、newmin ) . m_min = newmin; updateminimum();屬性properties為什么使用getter 函數(shù)?間接的屬性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

12、 constant final)使用屬性直接獲取通過元信息和屬性系統(tǒng)在運(yùn)行時發(fā)現(xiàn)屬性qstring text = label-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/rea

13、d/write/.動態(tài)屬性在運(yùn)行時給對象增加屬性可以用來“標(biāo)識”對象,等等。bool ret = object-setproperty(name, value);qobject:dynamicpropertynames() const真:如果屬性經(jīng)過真:如果屬性經(jīng)過q_property 定義 假:如果只是動態(tài)增加假:如果只是動態(tài)增加返回一個動態(tài)屬性的列表創(chuàng)建自定義屬性class angleobject : public qobject q_object q_property(qreal angle read angle write setangle)public: angleobject(qr

14、eal angle, qobject *parent = 0); qreal angle() const; void setangle(qreal);private: qreal m_angle;宏,描述屬性初始化值gettersetter私有狀態(tài)創(chuàng)建自定義屬性angleobject:angleobject(qreal angle, qobject *parent) : qobject(parent), m_angle(angle)qreal angleobject:angle() const return m_angle;void angleobject:setangle(qreal ang

15、le) m_angle = angle; dosomething();初始化值getter 簡單返回值。這里你可以計(jì)算復(fù)雜的值。更新內(nèi)部狀態(tài), 對變化作出反應(yīng)。自定義屬性 - 枚舉class angleobject : public qobject q_object q_enums(anglemode) q_property(anglemode anglemode read .)public: enum anglemode radians, degrees; .;普通枚舉聲明。宏通知qt anglemode 是一個枚舉類型。屬性使用枚舉作為類型。內(nèi)存管理qobject 可以有父對象和子對象當(dāng)一

16、個父對象被刪除,它的子對象也同樣被刪除。qobject *parent = new qobject();qobject *child1 = new qobject(parent);qobject *child2 = new qobject(parent);qobject *child1_1 = new qobject(child1);qobject *child1_2 = new qobject(child1);delete parent;parentchild1child2child1_1child1_2parent 刪除 child1 和 child2child1 刪除 child1_1

17、和 child1_2內(nèi)存管理當(dāng)需要實(shí)現(xiàn)視覺層級時使用到它。qdialog *parent = new qdialog();qgroupbox *box = new qgroupbox(parent);qpushbutton *button = new qpushbutton(parent);qradiobutton *option1 = new qradiobutton(box);qradiobutton *option2 = new qradiobutton(box);delete parent;parent 刪除 box 和 buttonbox 刪除 option1 和 option2使用

18、模式使用 this指針指向最高層父對象在棧上分配父對象空間void widget:showdialog() dialog dialog; if (dialog.exec() = qdialog:accepted) . dialog:dialog(qwidget *parent) : qdialog(parent) qgroupbox *box = qgroupbox(this); qpushbutton *button = qpushbutton(this); qradiobutton *option1 = qradiobutton(box); qradiobutton *option2 =

19、qradiobutton(box); .dialog 在作用范圍結(jié)束時被刪除堆(heap)當(dāng)使用 new 和 delete時, 內(nèi)存在堆中分配。堆內(nèi)存空間必須通過 delete 完全釋放,以防止內(nèi)存泄漏。只要有需要,分配在堆上的對象可以一直存活下去。newdelete構(gòu)造構(gòu)造construction析構(gòu)析構(gòu)destruction棧(stack)局部變量在棧上分配。棧變量超過作用范圍時會自動釋放。分配在棧中的對象在超出作用范圍時總是會被析構(gòu)。int a構(gòu)造構(gòu)造construction析構(gòu)析構(gòu)destruction堆 和 棧想要自動內(nèi)存管理,只有父對象需要在棧上分配。mymainwindowqap

20、plicationint main(int argc, char *argv) qapplication a(argc, argv); mymainwindow w; w.show(); return a.exec();mymainwindow:mymainwindow(. new qlabel(this); new .改變所有者qobject可以修改它所屬的父對象。父對象知道何時子對象被刪除一系列函數(shù)實(shí)現(xiàn)返回指針,從其所有者“拿走”釋放的數(shù)據(jù),把它留給拿取者處理obj-setparent(newparent);delete listwidget-item(0); / 刪除第一個item(不安

21、全)qlayoutitem *qlayout:takeat(int);qlistwidgetitem *qlistwidget:takeitem(int);/ safe alternativeqlistwidgetitem *item = listwidget-takeitem(0);if (item) delete item; item列表本質(zhì)上并不是子對象,而是擁有者。 這個例子進(jìn)行了說明。構(gòu)造規(guī)范幾乎所有的 qobject 都有一個默認(rèn)為空值的父對象。qwidget 的父對象是其它 qwidget類為了方便傾向于提供多種構(gòu)造(包括只帶有父對象的一種)父對象通常是帶缺省值的第一個參數(shù)。 q

22、label(const qstring &text, qwidget *parent=0, qt:windowflags f=0);qobject(qobject *parent=0);qpushbutton(qwidget *parent=0);qpushbutton(const qstring &text, qwidget *parent=0);qpushbutton(const qicon &icon, const qstring &text, qwidget *parent=0);構(gòu)造規(guī)范當(dāng)創(chuàng)建自己的 qobject時, 需考慮總是允許父對象 paren

23、t 為 0 (null)有一個只接受父對象的構(gòu)造函數(shù)parent 是帶默認(rèn)值的第一個參數(shù)提供幾種構(gòu)造函數(shù),避免空值、無效值(e.g. qstring()作為參數(shù)。休息信號(signal)和槽(slot)通過反饋的方式動態(tài)地或松散地將事件和狀態(tài)變化聯(lián)系起來。是什么使 qt 運(yùn)作?動作中的信號和槽emit clicked();動作中的信號和槽private slots: void on_addbutton_clicked(); void on_deletebutton_clicked();connect(clearbutton,signal(clicked(),listwidget,slot(cl

24、ear();connect(addbutton,signal(clicked(),this,slot(.);2xclear();動作中的信號和槽 . emit clicked(); . . emit clicked(); . . emit clicked(); . qstring newtext = qinputdialog:gettext(this, enter text, text:); if( !newtext.isempty() ) ui-listwidget-additem(newtext); foreach (qlistwidgetitem *item, ui-listwidget

25、-selecteditems() delete item; clear();信號和槽 vs 回調(diào)回調(diào)(callback)是一個函數(shù)指針,當(dāng)一個事件發(fā)生時被調(diào)用,任何函數(shù)都可以被安排作為回調(diào)。沒有類型安全總是以直接調(diào)用方式工作信號和槽的方式更加動態(tài)一個更通用的機(jī)制更容易互連兩個已存在的類相關(guān)類之間涉及更少的知識共享什么是槽?槽在各種槽段(section)中定義。槽可以返回值,但并不是通過聯(lián)接。任何數(shù)量的信號可以關(guān)聯(lián)到一個槽。它以一個普通的函數(shù)實(shí)現(xiàn)。它可以作為普通函數(shù)被調(diào)用。public slots: void apublicslot();protected slots: void aprotec

26、tedslot();private slots: void aprivateslot();connect(src, signal(sig(), dest, slot(slt();什么是信號?信號在信號段(section)中定義信號總是返回空信號總是不必實(shí)現(xiàn)由moc來提供實(shí)現(xiàn)信號可以關(guān)聯(lián)到任意數(shù)量的槽上通常產(chǎn)生一個直接調(diào)用,但是可以在線程之間作為事件來傳遞,甚至可以用在套接字之間(使用第三方類) 槽能以任意次序被激發(fā)信號使用emit 關(guān)鍵字發(fā)射出去。signals: void asignal();emit asignal();建立關(guān)聯(lián)qobject:connect( src, signal( s

27、ignature ), dest, slot( signature ) ); ( . )clicked()toggled(bool)settext(qstring)textchanged(qstring)rangechanged(int,int)settitle(qstring text)setvalue(42)簽名由函數(shù)名和參數(shù)類型組成。不允許有變量名或值。簽名由函數(shù)名和參數(shù)類型組成。不允許有變量名或值。自定義類型降低了可重用性自定義類型降低了可重用性qobject*setitem(itemclass)建立關(guān)聯(lián)qt 參數(shù)可以忽略,但不能無中生有。signalsrangechanged(int

28、,int)rangechanged(int,int)rangechanged(int,int)valuechanged(int)valuechanged(int)valuechanged(int)textchanged(qstring)clicked()clicked()slotssetrange(int,int)setvalue(int)updatedialog()setrange(int,int)setvalue(int)updatedialog()setvalue(int)setvalue(int)updatedialog()自動關(guān)聯(lián)使用designer,它很便捷地在接口和用戶代碼之間提

29、供自動關(guān)聯(lián)。通過調(diào)用qmetaobject:connectslotsbyname觸發(fā)當(dāng)命名時考慮重用性比較 on_widget_signal 和 updatepagemarginson_ object name _ signal name ( signal parameters )on_addbutton_clicked();on_deletebutton_clicked();on_listwidget_currentitemchanged(qlistwidgetitem*,qlistwidgetitem*)updatepagemargins可以關(guān)聯(lián)到一定數(shù)量信號或直接調(diào)用。值同步雙向連接 無

30、限循環(huán)必須停止 沒有信號被發(fā)射,除非發(fā)生實(shí)際的變化。connect(dial1, signal(valuechanged(int), dial2, slot(setvalue(int);connect(dial2, signal(valuechanged(int), dial1, slot(setvalue(int);void qdial:setvalue(int v) if(v=m_value) return; .這就是負(fù)責(zé)發(fā)射信號的所有代碼在您自己的類中不要忘記它。自定義信號和槽class angleobject : public qobject q_object q_property(q

31、real angle read angle write setangle notify anglechanged)public: angleobject(qreal angle, qobject *parent = 0); qreal angle() const;public slots: void setangle(qreal);signals: void anglechanged(qreal);private: qreal m_angle;在這里添加一個通知信號。setter構(gòu)造自然槽。信號匹配settersetter實(shí)現(xiàn)細(xì)節(jié)void angleobject:setangle(qreal

32、angle) if(m_angle = angle) return; m_angle = angle; emit anglechanged(m_angle);防止無限循環(huán)。不要忘記不要忘記!更新內(nèi)部狀態(tài),然后發(fā)射信號。信號是被“保護(hù)”的,他們可以從派生類發(fā)射。溫度轉(zhuǎn)換器使用 tempconverter 類實(shí)現(xiàn)在攝氏與華氏之間的轉(zhuǎn)換當(dāng)溫度改變時發(fā)射信號。溫度轉(zhuǎn)換器對話窗口(dialog window)包含以下對象一個 tempconverter 實(shí)例兩個 qgroupbox 部件(widget), 每一個包含一個 qdial 部件一個 qlcdnumber 部件溫度轉(zhuǎn)換器class tempco

33、nverter : public qobject q_object public: tempconverter(int tempcelsius, qobject *parent = 0); int tempcelsius() const; int tempfahrenheit() const;public slots: void settempcelsius(int); void settempfahrenheit(int);signals: void tempcelsiuschanged(int); void tempfahrenheitchanged(int);private: int m

34、_tempcelsius;先是q_object 宏qobject 作為父對象父對象指針讀和寫函數(shù)當(dāng)溫度變化時發(fā)射信號。在內(nèi)部表示整數(shù)攝氏度。溫度轉(zhuǎn)換器void tempconverter:settempcelsius(int tempcelsius) if(m_tempcelsius = tempcelsius) return; m_tempcelsius = tempcelsius; emit tempcelsiuschanged(m_tempcelsius); emit tempfahrenheitchanged(tempfahrenheit();void tempconverter:se

35、ttempfahrenheit(int tempfahrenheit) int tempcelsius = (5.0/9.0)*(tempfahrenheit-32); settempcelsius(tempcelsius);settempcelsius槽:settempfahrenheit槽:測試改變以中斷遞歸更新對象的狀態(tài)發(fā)射信號反映改變轉(zhuǎn)換,傳遞攝氏度是內(nèi)部表現(xiàn)形式。溫度轉(zhuǎn)換器表盤通過 tempconverter 聯(lián)系起來lcd 顯示直接受表盤來驅(qū)動。tempconvertersettempcelsiussettempfahrenheittempcelsiuschangedtempfah

36、renheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged displayconnect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiuslcd, slot(d

37、isplay(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechanged(int), tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconverter, si

38、gnal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiuschangedtempfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged display

39、connect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiuslcd, slot(display(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechanged(int),

40、 tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconverter, signal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiuschangedtem

41、pfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged displayconnect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiuslcd, sl

42、ot(display(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechanged(int), tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconverter

43、, signal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiuschangedtempfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged dis

44、playconnect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiuslcd, slot(display(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechanged(i

45、nt), tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconverter, signal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiuschange

46、dtempfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged displayconnect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiuslcd

47、, slot(display(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechanged(int), tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconve

48、rter, signal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiuschangedtempfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged

49、 displayconnect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiuslcd, slot(display(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechang

50、ed(int), tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconverter, signal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiusch

51、angedtempfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluevaluechanged displayconnect(celsiusdial, signal(valuechanged(int), tempconverter, slot(settempcelsius(int);connect(celsiusdial, signal(valuechanged(int), celsiu

52、slcd, slot(display(int);connect(tempconverter, signal(tempcelsiuschanged(int), celsiusdial, slot(setvalue(int);connect(fahrenheitdial, signal(valuechanged(int), tempconverter, slot(settempfahrenheit(int);connect(fahrenheitdial, signal(valuechanged(int), fahrenheitlcd, slot(display(int);connect(tempconverter, signal(tempfahrenheitchanged(int), fahrenheitdial, slot(setvalue(int);溫度轉(zhuǎn)換器用戶調(diào)節(jié)攝氏度表盤。tempconvertersettempcelsiussettempfahrenheittempcelsiuschangedtempfahrenheitchangedvaluechanged settempcelsiusvaluechanged settempfahrenheittempcelsiuschanged setvaluetempfahrenheitchanged setvaluev

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論