青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Qt元類型(MetaType)注冊門(收集轉載)

Posted on 2011-04-15 22:56 RTY 閱讀(356) 評論(0)  編輯 收藏 引用 所屬分類: Qt

Qt元類型(MetaType)注冊門

      昨天調試項目時,突然發現如下消息:

QObject::connect: Cannot queue arguments of type 'ERROR_LEVEL'
(Make sure 'ERROR_LEVEL' is registered using qRegisterMetaType().)

其中ERROR_LEVEL只是我定義的枚舉類型即enum ERROR_LEVEL。然后在Qt的信號-槽函數的參數中使用了這個枚舉型,在發送信號時就出現了上述警告。上面警告的大概意思是信號隊列中無法使用 ERROR_LEVEL類型,要使用qRegisterMetaType()注冊該類型后方可使用。

      通常使用的connect,實際上最后一個參數使用的是Qt::AutoConnection類型:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )

Qt支持6種連接方式,其中3中最主要:

  • Qt::DirectConnection(直連方式)

      當信號發出后,相應的槽函數將立即被調用。emit語句后的代碼將在所有槽函數執行完畢后被執行。(信號與槽函數關系類似于函數調用,同步執行

  • Qt::QueuedConnection(排隊方式)

      當信號發出后,排隊到信號隊列中,需等到接收對象所屬線程的事件循環取得控制權時才取得該信號,調用相應的槽函數。emit語句后的代碼將在發出信號后立即被執行,無需等待槽函數執行完畢。(此時信號被塞到信號隊列里了,信號與槽函數關系類似于消息通信,異步執行

  • Qt::AutoConnection(自動方式)

      Qt的默認連接方式,如果信號的發出和接收這個信號的對象同屬一個線程,那個工作方式與直連方式相同;否則工作方式與排隊方式相同。

      我的項目中的確跨線程使用了ERROR_LEVEL為參數類型的信號,因此使用的應當是排隊方式的信號-槽機制,出現“隊列中無法使用ERROR_LEVEL類型”的警告信息就可以理解了。放狗搜了一圈,有篇文章提供了個這樣的解決方案:

connect(cm, SIGNAL(sendLog(QUuid, QByteArray, bool)),
            this,SLOT(sendRes(QUuid,QByteArray,bool)));
改為:
connect(cm, SIGNAL(sendLog(QUuid, QByteArray, bool)),
            this,SLOT(sendRes(QUuid,QByteArray,bool)), Qt::DirectConnection);

這樣做的確能使警告信息消失,因為Qt官方文檔寫了:

With queued connections, the parameters must be of types that are known to Qt's meta-object system, because Qt needs to copy the arguments to store them in an event behind the scenes.

即使用排隊方式的信號-槽機制,Qt的元對象系統(meta-object system)必須知道信號傳遞的參數類型。這里手動改為直連方式,Qt的元對象系統就不必知道參數類型了,于是警告信息消失。但這樣做是不安全的,見Qt官方文檔:

Be aware that using direct connections when the sender and receiver live in different threads is unsafe if an event loop is running in the receiver's thread, for the same reason that calling any function on an object living in another thread is unsafe.

      因此,咱還是老老實實地用qRegisterMetaType()注冊類型吧,見代碼:

頭文件

/*! \file errorlevel.h*/
#ifndef ERRORLEVEL_H
#define ERRORLEVEL_H

/*! \enum ERROR_LEVEL
 * 錯誤等級的定義。通常用來在傳遞錯誤消息時標記錯誤的等級。
 */
enum ERROR_LEVEL
{
    NORMAL,  /*!< 普通錯誤,通常不需要處理,可以記錄或者顯示錯誤消息。*/
    CRITICAL /*!< 嚴重錯誤,需要緊急處理,如果沒有妥善處理,可能導致后續操作失敗。*/
};

#endif // ERRORLEVEL_H

cpp文件

/*! \file errorlevel.cpp*/
#include "errorlevel.h"

/*! 模板函數顯式實例化,注冊ERROR_LEVEL到元對象系統。這樣才可以在信號-槽
 * 隊列里使用ERROR_LEVEL類型參數。
 */
int i = qRegisterMetaType<ERROR_LEVEL>("ERROR_LEVEL");
元類型注冊方法受益于這篇文章
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品久久久久久久白皮肤| 欧美一区二区女人| 欧美+日本+国产+在线a∨观看| 性做久久久久久| 国产主播一区二区| 老牛影视一区二区三区| 久久野战av| 亚洲精品视频在线观看免费| 亚洲理伦在线| 国产伦精品一区二区三区视频黑人 | 一本久道久久久| 国产精品美女久久福利网站| 久久精品国产视频| 老司机午夜精品视频| 日韩午夜在线观看视频| 一区二区三区欧美激情| 国产日韩欧美一区| 欧美成人69av| 国产精品久久波多野结衣| 久久激情视频免费观看| 免费看亚洲片| 亚洲欧美中日韩| 久久精品人人做人人爽| 夜夜夜久久久| 欧美有码视频| 在线亚洲美日韩| 久久不射2019中文字幕| 一本色道综合亚洲| 欧美在线观看一区二区三区| 日韩一级二级三级| 欧美一区午夜精品| 亚洲视频在线观看网站| 久久久久九九九| 午夜精品一区二区三区在线播放| 久久久久久噜噜噜久久久精品| 一本色道婷婷久久欧美| 欧美一级一区| 亚洲午夜久久久久久久久电影院 | 欧美三级视频在线播放| 久久伊人亚洲| 国产精品亚洲网站| 亚洲精品久久嫩草网站秘色| 国产欧美一区二区三区久久| 欧美韩国日本一区| 国产一区二区日韩| 在线一区二区日韩| 夜夜嗨av色综合久久久综合网| 久久福利毛片| 久久成人一区二区| 国产精品久久| 99精品福利视频| 一本大道久久精品懂色aⅴ| 久久久之久亚州精品露出| 性色av一区二区怡红| 欧美午夜无遮挡| 亚洲精品三级| 9l视频自拍蝌蚪9l视频成人| 麻豆成人综合网| 欧美aⅴ99久久黑人专区| 国产一区99| 久久精品官网| 久久综合狠狠| 在线看日韩av| 久久激情综合网| 老司机67194精品线观看| 狠狠色狠狠色综合| 欧美在线看片| 久久天天狠狠| 1204国产成人精品视频| 玖玖综合伊人| 亚洲国产片色| 一区二区三区国产在线| 欧美片在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲人成网站777色婷婷| 欧美电影免费观看高清完整版| 亚洲成人直播| 在线视频精品一区| 欧美天天综合网| 亚洲摸下面视频| 久久精品欧美日韩精品| 精品51国产黑色丝袜高跟鞋| 久久综合狠狠综合久久综合88| 欧美高清视频一区二区| 亚洲蜜桃精久久久久久久| 欧美网站大全在线观看| 亚洲永久免费精品| 久久婷婷麻豆| 99热这里只有精品8| 国产精品va在线播放| 欧美一级一区| 亚洲国产成人久久综合| 亚洲性图久久| 黄色成人av网站| 欧美日韩成人网| 欧美一区二区三区四区高清 | 麻豆国产va免费精品高清在线| 最新国产拍偷乱拍精品| 欧美日韩中文字幕日韩欧美| 欧美怡红院视频一区二区三区| 欧美成人午夜免费视在线看片 | 国产亚洲精品久久久久婷婷瑜伽| 久久在线观看视频| 在线亚洲高清视频| 毛片一区二区| 亚洲男人的天堂在线| 亚洲大胆在线| 国产精品视频午夜| 欧美11—12娇小xxxx| 亚洲欧美国产精品桃花| 亚洲国产另类久久久精品极度| 午夜精品视频一区| 亚洲人成人一区二区三区| 国产美女精品视频| 欧美日韩一区二区在线播放| 久久久91精品国产一区二区精品| 夜夜嗨av一区二区三区网页| 久久躁日日躁aaaaxxxx| 亚洲在线免费| 一区二区三区 在线观看视频| 极品少妇一区二区三区| 欧美午夜宅男影院在线观看| 免费看的黄色欧美网站| 久久精品人人爽| 亚洲欧美日韩区| av成人国产| 亚洲麻豆av| 亚洲福利在线视频| 女人香蕉久久**毛片精品| 久久er精品视频| 午夜在线观看欧美| 亚洲影视在线播放| 夜夜嗨网站十八久久| 亚洲日本成人| 亚洲麻豆av| 亚洲精选视频在线| 亚洲欧洲一区二区三区在线观看 | 国产亚洲欧美日韩日本| 国产精品卡一卡二卡三| 国产精品a级| 欧美日韩亚洲网| 欧美日韩国产bt| 欧美日韩一区二区在线观看视频| 欧美成人精品高清在线播放| 美女图片一区二区| 免费一级欧美片在线播放| 免费成人毛片| 欧美黑人国产人伦爽爽爽| 蜜臀91精品一区二区三区| 美女免费视频一区| 欧美精品日韩精品| 欧美日韩亚洲综合一区| 欧美视频在线观看免费| 国产精品国产三级国产aⅴ入口| 欧美日韩网址| 国产精品女主播一区二区三区| 国产精品日韩久久久久| 国产欧美一区二区三区在线看蜜臀| 国产伦精品一区二区三区高清| 国产精品尤物| 一区二区三区中文在线观看| 亚洲电影免费观看高清| 99精品国产在热久久婷婷| 夜夜嗨av一区二区三区四季av | 亚洲网站视频福利| 亚洲综合日韩在线| 久久精品亚洲精品| 亚洲国产成人在线| 日韩午夜在线| 欧美亚洲一区三区| 麻豆国产精品一区二区三区| 欧美精选一区| 国产拍揄自揄精品视频麻豆| 在线日韩欧美| 亚洲午夜性刺激影院| 久久九九国产| 亚洲清纯自拍| 欧美在线综合视频| 欧美另类高清视频在线| 国产性做久久久久久| 亚洲人成人一区二区三区| 国产精品99久久不卡二区| 久久久久久69| 亚洲伦理中文字幕| 久久久久成人精品| 国产精品va在线| 亚洲国产美女精品久久久久∴| 亚洲一区二区黄色| 欧美 日韩 国产 一区| 宅男噜噜噜66一区二区| 另类酷文…触手系列精品集v1小说| 欧美视频你懂的| 亚洲黄色在线| 久久夜色精品一区| 在线视频一区二区| 欧美电影免费观看| 樱桃成人精品视频在线播放| 午夜精品美女自拍福到在线 | 亚洲黄色片网站| 久久成人综合视频|