色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QObject中常使用的成員函數(shù)和重要宏定義

嵌入式小生 ? 來(lái)源:嵌入式小生 ? 2023-02-20 09:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、QObject的重要知識(shí)

QObject是Qt對(duì)象模型的核心。這個(gè)模型的核心特性是一個(gè)強(qiáng)大的無(wú)縫對(duì)象通信機(jī)制,即信號(hào)和槽。可以使用connect()將信號(hào)連接到槽函數(shù),并使用disconnect()破壞已經(jīng)存在的連接。為了避免永不結(jié)束的通知循環(huán),可以使用blockSignals()暫時(shí)阻塞信號(hào)。受保護(hù)的函數(shù)connectNotify()disconnectNotify()可以用于跟蹤信號(hào)連接。

Qt中,以QObject為基礎(chǔ)形成了一棵“對(duì)象樹(shù)”,當(dāng)使用另一個(gè)對(duì)象作為父對(duì)象創(chuàng)建QObject時(shí),該對(duì)象將自動(dòng)將自己添加到父對(duì)象的children()列表中。此后父對(duì)象擁有該對(duì)象的所有權(quán),則會(huì)自動(dòng)刪除析構(gòu)函數(shù)中的子元素。在開(kāi)發(fā)中可以使用findChild()findChildren()根據(jù)名稱(chēng)和可選的類(lèi)型查找子對(duì)象。

每個(gè)對(duì)象都有一個(gè)objectName(),可以通過(guò)相應(yīng)的metaObject()找到它的類(lèi)名(函數(shù):QMetaObject::className())。在實(shí)際開(kāi)發(fā)中可以使用inherits()函數(shù)確定對(duì)象的類(lèi)是否繼承了QObject繼承層次結(jié)構(gòu)中的另一個(gè)類(lèi)。當(dāng)一個(gè)對(duì)象被刪除時(shí),會(huì)發(fā)出destroyed()信號(hào),通過(guò)這一點(diǎn)可以捕獲此信號(hào),避免對(duì)QObject進(jìn)行懸掛引用。

二、QObject重要成員函數(shù)

本小節(jié)總結(jié)在開(kāi)發(fā)中,QObject中常使用的成員函數(shù)和重要宏定義。

1、事件獲取和處理API
/*在此對(duì)象上安裝事件篩選器filterObj*/
voidQObject::installEventFilter(QObject*filterObj)

/*這個(gè)虛擬函數(shù)接收對(duì)象的事件,如果事件e被識(shí)別并處理,則返回true*/
boolQObject::event(QEvent*e)
2、對(duì)象的線(xiàn)程關(guān)聯(lián)API
/*返回對(duì)象所在的線(xiàn)程。*/
QThread*QObject::thread()const

/*更改對(duì)象及其子對(duì)象的線(xiàn)程關(guān)聯(lián)性。如果一個(gè)對(duì)象有父對(duì)象,則不能移動(dòng)該對(duì)象到另一個(gè)線(xiàn)程中*/
voidQObject::moveToThread(QThread*targetThread)

3、獲取子對(duì)象API
/*返回該對(duì)象具有給定名稱(chēng)的所有可轉(zhuǎn)換為類(lèi)型T的子對(duì)象,如果沒(méi)有此類(lèi)對(duì)象,則返回一個(gè)空列表*/
QListfindChildren(constQString&name=QString(),Qt::FindChildOptionsoptions=Qt::FindChildrenRecursively)const

/*返回子對(duì)象列表*/
constQObjectList&children()const
4、qobject_cast

函數(shù)原型如下:

Tqobject_cast(QObject*object)
Tqobject_cast(constQObject*object)

如果對(duì)象類(lèi)型為T(mén)(或子類(lèi)),則將給定的對(duì)象轉(zhuǎn)換為類(lèi)型T;否則返回nullptr。如果對(duì)象是nullptr,那么它也將返回nullptr。

注意:類(lèi)T必須繼承(直接或間接)QObject并使用Q_OBJECT宏聲明。

qobject_cast()函數(shù)的行為類(lèi)似于標(biāo)準(zhǔn)c++ dynamic_cast(),它的優(yōu)點(diǎn)是不需要RTTI(Run-Time Type Identification-運(yùn)行時(shí)類(lèi)型識(shí)別)支持,并且可以跨動(dòng)態(tài)庫(kù)邊界工作。

5、事件處理相關(guān)函數(shù)
//此虛函數(shù)用于接收對(duì)象的事件,如果事件e被識(shí)別和處理,則返回true。
virtualboolevent(QEvent*e)

//如果此對(duì)象已作為被監(jiān)視對(duì)象的事件過(guò)濾器安裝,則過(guò)濾事件。
virtualbooleventFilter(QObject*watched,QEvent*event)

//從該對(duì)象中移除事件篩選器對(duì)象obj。
voidremoveEventFilter(QObject*obj)

//在對(duì)象上安裝事件篩選器filterObj
voidinstallEventFilter(QObject*filterObj)
6、定時(shí)器相關(guān)函數(shù)
//啟動(dòng)計(jì)時(shí)器并返回計(jì)時(shí)器標(biāo)識(shí)符
intstartTimer(intinterval,Qt::TimerTypetimerType=Qt::CoarseTimer)

//啟動(dòng)計(jì)時(shí)器并返回計(jì)時(shí)器標(biāo)識(shí)符
intstartTimer(std::millisecondstime,Qt::TimerTypetimerType=Qt::CoarseTimer)

//使用定時(shí)器標(biāo)識(shí)符id終止計(jì)時(shí)器
voidkillTimer(intid)
7、重要宏定義
  • Q_DISABLE_COPY(Class)

    禁止對(duì)給定類(lèi)使用復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符。

  • Q_DISABLE_COPY_MOVE(Class)

該宏用于禁用給定類(lèi)的復(fù)制構(gòu)造函數(shù)、賦值運(yùn)算符、移動(dòng)構(gòu)造函數(shù)和移動(dòng)賦值運(yùn)算符,將Q_DISABLE_COPYQ_DISABLE_MOVE組合在一起。

  • Q_DISABLE_MOVE(Class 5.13)

禁止對(duì)給定類(lèi)使用移動(dòng)構(gòu)造函數(shù)和移動(dòng)賦值操作符。

  • Q_EMIT

當(dāng)希望使用第三方信號(hào)/槽函數(shù)機(jī)制來(lái)使用Qt信號(hào)和槽函數(shù)時(shí),可以使用此宏替代emit關(guān)鍵字來(lái)發(fā)出信號(hào)。

  • Q_ENUM(...)

這個(gè)宏用于向元對(duì)象系統(tǒng)注冊(cè)一個(gè)枚舉類(lèi)型。該宏必須放在enum聲明之后,且放在具有Q_OBJECTQ_GADGET宏的類(lèi)中。對(duì)于命名空間,應(yīng)該使用Q_ENUM_NS()。例如:

classMyClass:publicQObject
{
Q_OBJECT

public:
MyClass(QObject*parent=nullptr);
~MyClass();

enumPriority{High,Low,VeryHigh,VeryLow};
Q_ENUM(Priority)
voidsetPriority(Prioritypriority);
Prioritypriority()const;
};
  • Q_ENUM_NS(...)

這個(gè)宏向元對(duì)象系統(tǒng)注冊(cè)一個(gè)枚舉類(lèi)型。它必須放在enum聲明之后,,且具有Q_NAMESPACE宏的名稱(chēng)空間中。與Q_ENUM相同,但在命名空間中。

  • Q_FLAG(...)

這個(gè)宏向元對(duì)象系統(tǒng)中注冊(cè)一個(gè)單標(biāo)記類(lèi)型。它通常用于類(lèi)定義中,以聲明給定enum的值可以用作標(biāo)志,并使用按位或運(yùn)算符進(jìn)行組合。對(duì)于命名空間,應(yīng)該使用Q_FLAG_NS()。例如:

classQLibrary:publicQObject
{
Q_OBJECT

public:
...

enumLoadHint{
ResolveAllSymbolsHint=0x01,
ExportExternalSymbolsHint=0x02,
LoadArchiveMemberHint=0x04
};
Q_DECLARE_FLAGS(LoadHints,LoadHint)
Q_FLAG(LoadHint)
...
}
  • Q_INTERFACES(...)

這個(gè)宏告訴Qt這個(gè)類(lèi)實(shí)現(xiàn)了哪些接口。在宏定義在實(shí)現(xiàn)插件的時(shí)候使用。例如:

classBasicToolsPlugin:publicQObject,
publicBrushInterface,
publicShapeInterface,
publicFilterInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID"org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface"FILE"basictools.json")
Q_INTERFACES(BrushInterfaceShapeInterfaceFilterInterface)

public:
...
};
  • Q_NAMESPACE

Q_NAMESPACE宏用于將QMetaObject功能添加到名稱(chēng)空間。Q_NAMESPACE可以有Q_CLASSINFOQ_ENUM_NS、Q_FLAG_NS,但不能有Q_ENUMQ_FLAGQ_PROPERTYQ_INVOKABLE、信號(hào)或槽函數(shù)。

  • Q_NAMESPACE_EXPORT(EXPORT_MACRO)

該宏的工作原理Q_NAMESPACE宏完全相同。但是,在名稱(chēng)空間中定義的外部staticMetaObject變量是用提供的EXPORT_MACRO限定符聲明的。如果需要從動(dòng)態(tài)庫(kù)導(dǎo)出對(duì)象,該宏定義非常有用。

  • Q_OBJECT

Q_OBJECT宏必須出現(xiàn)在類(lèi)定義的私有部分中,該類(lèi)定義聲明自己的信號(hào)和槽函數(shù),或者使用Qt元對(duì)象系統(tǒng)提供的其他支持。

  • Q_PROPERTY(...)

此宏用于在繼承QObject的類(lèi)中聲明屬性。屬性的行為類(lèi)似于類(lèi)數(shù)據(jù)成員,但它們具有可通過(guò)元對(duì)象系統(tǒng)訪(fǎng)問(wèn)的其他特性。如下代碼:

Q_PROPERTY(typename
(READgetFunction[WRITEsetFunction]|
MEMBERmemberName[(READgetFunction|WRITEsetFunction)])
[RESETresetFunction]
[NOTIFYnotifySignal]
[REVISIONint]
[DESIGNABLEbool]
[SCRIPTABLEbool]
[STOREDbool]
[USERbool]
[CONSTANT]
[FINAL])
  • Q_SIGNAL

這是一個(gè)額外的宏,允許我們將單個(gè)函數(shù)標(biāo)記為信號(hào)。當(dāng)使用不支持信號(hào)或Q_SIGNALS組的第三方源代碼解析器時(shí),使用這個(gè)宏。

  • Q_SLOT

這是一個(gè)額外的宏,它允許將單個(gè)函數(shù)標(biāo)記為槽函數(shù)。當(dāng)使用不支持槽函數(shù)或Q_SLOT組的第三方源代碼解析器時(shí),使用這個(gè)宏。

三、信號(hào)和槽的連接機(jī)制注意事項(xiàng)

1、【自動(dòng)連接(默認(rèn))】如果信號(hào)是在接收對(duì)象具有關(guān)聯(lián)的線(xiàn)程中發(fā)出的,那么行為與直接連接相同。否則,行為與隊(duì)列連接相同。

2、【直接連接】當(dāng)信號(hào)發(fā)出時(shí),槽函數(shù)被立即調(diào)用。槽函數(shù)在發(fā)射器的線(xiàn)程中執(zhí)行,而發(fā)射器的線(xiàn)程不一定是接收器的線(xiàn)程。

3、【隊(duì)列連接】當(dāng)控制返回到接收方線(xiàn)程的事件循環(huán)時(shí)調(diào)用槽,槽函數(shù)在接收方的線(xiàn)程中執(zhí)行。

4、【阻塞排隊(duì)連接】槽被調(diào)用為排隊(duì)連接,除非當(dāng)前線(xiàn)程阻塞直到槽函數(shù)返回。

注意:使用該阻塞排隊(duì)連接類(lèi)型連接同一線(xiàn)程中的對(duì)象將導(dǎo)致死鎖。

5、【唯一連接】與自動(dòng)連接相同,但只在不復(fù)制現(xiàn)有連接的情況下才建立連接。也就是說(shuō),如果相同的信號(hào)已經(jīng)為相同的對(duì)象連接到相同的槽,那么就不創(chuàng)建連接,并且connect()返回false

連接類(lèi)型可以通過(guò)向connect()傳遞一個(gè)附加參數(shù)來(lái)指定。注意,如果事件循環(huán)運(yùn)行在接收方的線(xiàn)程中,當(dāng)發(fā)送方和接收方位于不同線(xiàn)程中時(shí)使用直接連接是不安全的,這與調(diào)用位于另一個(gè)線(xiàn)程中的對(duì)象上的函數(shù)是不安全的原因相同。

QObject::connect()本身是線(xiàn)程安全的。

對(duì)于隊(duì)列連接,傳遞的參數(shù)必須是Qt元對(duì)象系統(tǒng)已知的類(lèi)型,因?yàn)镼t需要復(fù)制參數(shù),以便存儲(chǔ)參數(shù);如果參數(shù)類(lèi)型不是Qt元對(duì)象系統(tǒng)已知的,使用隊(duì)列連接,將獲得錯(cuò)誤提示信息,這時(shí)候則需要在創(chuàng)建連接之前,調(diào)用qRegisterMetaType()向元對(duì)象系統(tǒng)注冊(cè)該數(shù)據(jù)類(lèi)型。

四、線(xiàn)程關(guān)聯(lián)性

在Qt中,QObject實(shí)例具有線(xiàn)程相關(guān)性,或者可以理解成QObject存在于某個(gè)線(xiàn)程中。當(dāng)QObject接收到排隊(duì)的信號(hào)或發(fā)布的事件時(shí),槽函數(shù)或事件處理程序?qū)⒃谠搶?duì)象所在的線(xiàn)程中運(yùn)行,這一點(diǎn)很重要。

注意:如果一個(gè)QObject沒(méi)有線(xiàn)程關(guān)聯(lián)(也就是說(shuō),如果thread()返回0),或者如果它存在于一個(gè)沒(méi)有運(yùn)行事件循環(huán)的線(xiàn)程中,那么它就不能接收排隊(duì)的信號(hào)或發(fā)布的事件。

默認(rèn)情況下,QObject實(shí)例存在于創(chuàng)建它的線(xiàn)程中,在實(shí)際開(kāi)發(fā)中可使用thread()查詢(xún)對(duì)象的線(xiàn)程關(guān)聯(lián),并使用moveToThread()更改對(duì)象的線(xiàn)程關(guān)聯(lián)。

注意:所有QObject必須與它們的父對(duì)象生活在同一個(gè)線(xiàn)程中。除此之外,還需要知道:

(1)如果涉及的兩個(gè)QObject位于不同的線(xiàn)程中,setParent()將失敗。

(2)當(dāng)一個(gè)QObject被移動(dòng)到另一個(gè)線(xiàn)程時(shí),它的所有子線(xiàn)程也會(huì)被自動(dòng)移動(dòng)。

(3)如果QObject有一個(gè)父對(duì)象,moveToThread()將失敗。

(4)如果QObject是在QThread::run()中創(chuàng)建的,它們不能成為QThread對(duì)象的子對(duì)象,因?yàn)镼Thread并不存在于調(diào)用QThread::run()的線(xiàn)程中。

QObject的父子關(guān)系必須通過(guò)傳遞一個(gè)指向子構(gòu)造函數(shù)的指針或調(diào)用setParent()來(lái)設(shè)置。如果沒(méi)有這個(gè)步驟,當(dāng)調(diào)用moveToThread()時(shí),對(duì)象的成員變量將保持在舊線(xiàn)程中。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1568

    瀏覽量

    63736
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4377

    瀏覽量

    64556
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    2

    文章

    314

    瀏覽量

    38968

原文標(biāo)題:Qt的萬(wàn)能承載者QObject,了解多少?

文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言定義使用技巧

    寫(xiě)好C語(yǔ)言,漂亮的定義重要,使用定義可以防止出錯(cuò),提高可移植性,可讀性,方便性等等。下面列舉一些成熟軟件
    發(fā)表于 07-29 09:35 ?1226次閱讀

    C語(yǔ)言中常用的定義

    寫(xiě)好C語(yǔ)言,漂亮的定義重要,使用定義可以防止出錯(cuò),提高可移植性,可讀性,方便性等等。下面列舉一些成熟軟件
    發(fā)表于 10-18 10:05 ?1987次閱讀

    C語(yǔ)言中定義的應(yīng)用

    在C語(yǔ)言中,定義是一種預(yù)處理指令,用于在代碼中定義和使用常量、函數(shù)或代碼片段的替代。
    發(fā)表于 08-17 15:33 ?1162次閱讀

    C編程定義函數(shù)該如何修改?

    那么該如何修改呢?不希望寫(xiě)成函數(shù)形式的,寫(xiě)成定義形式的比較好。
    發(fā)表于 12-26 08:51

    c語(yǔ)言中常用的定義有哪些?

    c語(yǔ)言中常用的定義有哪些?
    發(fā)表于 04-28 06:01

    C語(yǔ)言定義使用技巧

    寫(xiě)好C語(yǔ)言,漂亮的定義重要,使用定義可以防止出錯(cuò),提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟件
    發(fā)表于 11-13 12:04 ?36次下載

    內(nèi)聯(lián)函數(shù)定義的區(qū)別介紹

    定義是C語(yǔ)言提供的三種預(yù)處理功能的其中一種,這三種預(yù)處理包括:定義、文件包含、條件編譯。定義
    發(fā)表于 12-15 15:33 ?2468次閱讀
    內(nèi)聯(lián)<b class='flag-5'>函數(shù)</b>和<b class='flag-5'>宏</b><b class='flag-5'>定義</b>的區(qū)別介紹

    定義 “中斷函數(shù)接口”的注意事項(xiàng)

    定義“中斷函數(shù)接口”的注意事項(xiàng)
    的頭像 發(fā)表于 03-07 16:42 ?2898次閱讀

    ARM Linux中一些重要及地址定義

    ARM Linux中一些重要及地址定義
    的頭像 發(fā)表于 06-22 17:02 ?2934次閱讀

    一些成熟軟件中常用的定義

    寫(xiě)好C語(yǔ)言,漂亮的定義重要,使用定義可以防止出錯(cuò),提高可移植性,可讀性,方便 性等等。 下面列舉一些成熟軟件
    的頭像 發(fā)表于 01-18 11:21 ?2533次閱讀

    C語(yǔ)言定義與預(yù)處理、函數(shù)函數(shù)庫(kù)

    目錄前言一、C語(yǔ)言預(yù)處理二、定義三、函數(shù)四、函數(shù)庫(kù)五、自己制作靜態(tài)鏈接庫(kù)(ubuntu 環(huán)境下,即使用Linux系統(tǒng)平臺(tái)上的gcc)六、自己制作動(dòng)態(tài)鏈接庫(kù)(ubuntu 環(huán)境下,即使
    發(fā)表于 12-07 21:06 ?3次下載
    C語(yǔ)言<b class='flag-5'>宏</b><b class='flag-5'>定義</b>與預(yù)處理、<b class='flag-5'>函數(shù)</b>和<b class='flag-5'>函數(shù)</b>庫(kù)

    類(lèi)的申明和成員函數(shù)定義分離是什么

    前面我們學(xué)習(xí)了如何定義類(lèi),以及如何使用類(lèi)的成員,在前面我們把成員函數(shù)定義在了類(lèi)的內(nèi)部,接下來(lái)我們學(xué)習(xí),如何把類(lèi)的
    的頭像 發(fā)表于 02-27 15:33 ?1275次閱讀

    C語(yǔ)言函數(shù)封裝技巧分享

    函數(shù),即包含多條語(yǔ)句的定義,其通常為某一被頻繁調(diào)用的功能的語(yǔ)句封裝,且不想通過(guò)函數(shù)方式封裝來(lái)降低額外的彈棧壓棧開(kāi)銷(xiāo)。
    的頭像 發(fā)表于 09-14 09:31 ?852次閱讀

    列舉一些C語(yǔ)言中常用的定義

    寫(xiě)好C語(yǔ)言,使用定義可以防止出錯(cuò),提高可移植性、可讀性等。下文列舉一些成熟軟件中常用的定義
    發(fā)表于 10-07 10:54 ?995次閱讀
    列舉一些C語(yǔ)言<b class='flag-5'>中常</b>用的<b class='flag-5'>宏</b><b class='flag-5'>定義</b>

    C語(yǔ)言中函數(shù)定義和用法

    函數(shù)是一種特殊的函數(shù),與普通函數(shù)不同的是,它可以擁有多條語(yǔ)句和局部變量,從而實(shí)現(xiàn)更復(fù)雜的功
    發(fā)表于 10-11 11:32 ?4274次閱讀
    C語(yǔ)言中<b class='flag-5'>宏</b><b class='flag-5'>函數(shù)</b>的<b class='flag-5'>定義</b>和用法
    主站蜘蛛池模板: 日本欧美久久久久免费播放网 | 99国产在线观看 | 免费韩国伦理2017最新 | 男生射女生 | 日本大片免a费观看视频 | 国产日韩精品一区二区三区在线 | 国产精品亚欧美一区二区三区 | 久久成人午夜电影mp4 | 中文字幕 亚洲 有码 在线 | 恋夜影院支持安卓视频美女 | 在线观看国产人视频免费中国 | 国产色婷亚洲99精品AV | 驯服有夫之妇HD中字日本 | 精品欧美小视频在线观看 | 国产亚洲精品香蕉视频播放 | 日韩精品亚洲专区在线影院 | 大地影院日本韩国电影免费观看 | 亚洲人成电影网站 | 伊人久在线 | 亚洲中文字幕永久在线全国 | 嫩草欧美曰韩国产大片 | 性色少妇AV蜜臀人妻无码 | 日本乱子人伦在线视频 | 办公室沙发口爆12P 办公室日本肉丝OL在线 | 91伊人久久大香线蕉 | va亚洲va天堂va视频在线 | 99国产视频| 国产亚洲精品AAAAAAA片 | 超碰97超碰在线视频哦 | 国精一区二区AV在线观看网站 | 久久视热频国只有精品 | 抽插内射高潮呻吟爆乳 | 偷拍自怕亚洲在线第7页 | 黑人BBCVIDEOS极品 | 优优色影院 | 亚洲AV香蕉一区区二区三区蜜桃 | 99RE久久精品国产 | 色婷婷我要去我去也 | 午夜福利体验试看120秒 | 芳草地在线观看免费视频 | 24小时日本在线电影 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品