的笔记

随时随地编辑

晒晒QT链接信号槽源码

主旨:本文主要是为了还原QT链接信号槽的真相

开发环境
qt 4.5.2

这是在是一个入门级的小问题
如果草函数声明时没有像这样指明:
    public slots:
并且槽函数没有声明为虚函数,则会产生链接失败,否则无法响应。为什么呢?先将各处看起来搞得混淆难懂的角落曝光再说。

Q_OBJECT展开
 1    public
 2    template <typename T> inline 
 3    void qt_check_for_QOBJECT_macro(const T &_q_argument) const 
 4    int i = qYouForgotTheQ_OBJECT_Macro(this&_q_argument); i = i; } 
 5    static const QMetaObject staticMetaObject; virtual const QMetaObject *metaObject() constvirtual void *qt_metacast(const char *); 
 6    static inline QString tr(const char *s, const char *= 0
 7    return staticMetaObject.tr(s, c); } 
 8    static inline QString trUtf8(const char *s, const char *= 0
 9    return staticMetaObject.trUtf8(s, c); } 
10    static inline QString tr(const char *s, const char *c, int n) 
11    return staticMetaObject.tr(s, c, n); } 
12    static inline QString trUtf8(const char *s, const char *c, int n) 
13    return staticMetaObject.trUtf8(s, c, n); } 
14    virtual int qt_metacall(QMetaObject::Call, intvoid **); 
15    
16    private:
17

Ui::TestQtDlgClass展开


这里进行信号槽链接:
        QObject::connect(pushButton, qFlagLocation("2""clicked()" "\0""e:\\DEVELOP\\TEST\\TestQtDlg\\GeneratedFiles\\ui_testqtdlg.h"":""64"), TestQtDlgClass, qFlagLocation("1""button1()" "\0""e:\\DEVELOP\\TEST\\TestQtDlg\\GeneratedFiles\\ui_testqtdlg.h"":""64"));


flagged_locations代码
 1const int flagged_locations_count = 2;
 2static const char* flagged_locations[flagged_locations_count] = {0};
 3
 4const char *qFlagLocation(const char *method)
 5{
 6    static int idx = 0;
 7    flagged_locations[idx] = method;
 8    idx = (idx+1% flagged_locations_count;
 9    return method;
10}

11


 QObject::connect原始文件
QObject::connect

posted on 2011-05-24 20:04 的笔记 阅读(691) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理