最近正在做个嵌入式的项目,由多个模块组成,姑且把他们命名为,A(主程序), B(子模块),C(子模块)...
我主程序A启起来后,用户若点B模块图标,即启动B模块,采用QLibrary类的load方法调用B模块生成的动态库。
主程序A中调用方法:
void Mainwidget::importOtherModule(const QString &filename){
m_commonLib.setFileName(filename);
if (m_commonLib.load())
{
m_createModuleFunction = (CreateModule)m_commonLib.resolve("createModule");
if(m_createModuleFunction)
{
m_pOtherModule = 0;
m_pOtherModule = m_createModuleFunction();
if(m_pOtherModule)
{
ui->stackedWidget->addWidget(m_pOtherModule);
ui->stackedWidget->setCurrentIndex(OTHER_MODULE_PAGE);
connect(m_pOtherModule, SIGNAL(signalSendMsgToPAM(const int&, const QVariant&)),
this,SLOT(slotHandleOtherModuleMsg(const int&, const QVariant&)), Qt::QueuedConnection);
}
}
else
qDebug() << "resolve failed";
}
else
qDebug()<<"load submodule failure!";
}
接口文件如下:
//moduleinterface.h
#ifndef MODULEINTERFACE_H
#define MODULEINTERFACE_H
#include <QWidget>
#include <QVariant>
#include <QtCore/qglobal.h>
#include "globaldefine.h"
class ModuleInterface : public QWidget
{
Q_OBJECT
public:
virtual ~ModuleInterface() {}
signals:
void signalSendMsgToPAM(const int &cmd, const QVariant &data = QVariant());
public slots:
};
extern "C" MODULESHARED_EXPORT ModuleInterface* createModule();
#endif // MODULEINTERFACE_H
//moduleinterface.cpp
#include <QDebug>
#include "moduleinterface.h"
#include "scdvisualizer.h"
ModuleInterface* createModule()
{
return new ScdVisualizer();
}
B模块中类ScdVisualizer 继承接口类ModuleInterface
class ScdVisualizer : public ModuleInterface
{
Q_OBJECT
public:
explicit ScdVisualizer(QWidget *parent = 0);
virtual ~ScdVisualizer();
......
private:
Ui::ScdVisualizer *ui;
ConsoleContainer *m_pConsoleContainer; //类ConsoleContainer
};
#endif // SCDVISUALIZER_H
而类ScdVisualizer 需要调用ConsoleContainer 中函数addButton(),问题就出在这里,这个addButton函数始终不会被执行,程序也不报错,看起这条语句被注释一样。但是如果我在windows环境中运行,正确无误。只是在嵌入式环境中问题才显现。请高手帮助看下,感激不尽!