Qt派生类继承基类信号槽问题

在A项目中定义基类Base,里面含有发送和接收的信号和槽函数。在项目B中定义派生类ComA继承自Base,B中有一个按钮,点击按钮后调用Base中的sendMsg信号发送信息。
方式1中方法是可行的。但是方法2中槽函数却收不到信息。但是从A向B中发送的信号在方式2中是可行的。方式1采用的是直接引用的方式;方式2采用动态加载的形式。二者区别在什么地方呢?为何直接引用可以,动态加载的就不可以呢?请各位大神指教~~~

项目A中类的伪代码如下:
    class Base:public QWidget{
        Q_OBJECT
        ......
        signals:
            void sendMsg(const QString &str);
        public slots:
            virtual void recMsg(const QString &str){
            }
    }
    Class MainWindow:public QMainWindow{
        Q_OBJECT
        .....
        signals:
                void sendMsgToCom(const QString &str);
        private slots:
              void recMsgFromCom(const QString &str);
}
    在MainWindow构造函数中
        //方式1
    Base *test = new ComA();
    this->setCentralWidget((QWidget*)test);
        connect(test,SIGNAL(sendMsgToFrame(QString)),this,SLOT(recMsgFromCom(QString)));
        //方式2
         QLibrary lib("B.dll");
    typedef Base* (*handle)();
    handle t = (handle)lib.resolve("CreateComInterface");
    this->setCentralWidget((QWidget*)t());
    Base *child = t();
    connect(child,SIGNAL(sendMsgToFrame(QString)),this,SLOT(recMsgFromCom(QString)));
    connect(this,SIGNAL(sendMsgToCom(QString)),child,SLOT(recMsgFromFrame(QString)));
项目B中类的伪代码如下,B项目最终导出为动态库,供A使用。
        Class ComA:public Base{
            Q_OBJECT
            ......
            public slots:
                //实现基类中槽
                virtual void recMsg(const QString &str);
     }
     //B中带界面,点击按钮后发送sendMsg信号
     //导出C接口
     extern "C" __declspec(dllexport) Base* CreateComInterface();
查看全部
Kevinwang623
Kevinwang623
2016/09/03 12:15
  • 点赞
  • 收藏
  • 回答
    私信

1个回复