qt调用动态库时是否可以调用一个类的方法,如自定义了基于QWidget的CWidget类,该类有一方法为show();是否可以调用CWidget::show();如果可以的话怎么调用,如果不可以的话我应该怎么做才能够显示自定义的CWidget类所定义的界面,我在作的过程中是写了一个接口函数;以下是我的一个小例子:
/////////////////////////////////////////////////////////////////////////////////
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <qwidget.h>
class CWidget : public QWidget;
{
public:
CWidget(QWidget * parent = 0);
}
#endif
/////////////////////////////////////////////////////////////////////////////////1
widget.cpp
#include <QtGui>
#include "widget.h"
CWidget::CWidget(QWidget * parent):QWidget(QWidget)
{
QLabel * label1 = new QLabel("label1");
QLabel * label2 = new QLabel("label2");
QLayout * layout = new QLayout;
layout->addWidget(label1);
layout->addWidget(label2);
setLayout(layout);
}
///////////////////////////////////////////////////////////////////////////////////
example.h
extern int showwidget();
///////////////////////////////////////////////////////////////////////////////////
int showwidget()
{
CWidget widget;
widget.show();
return 1;
}
//////////////////////////////////////////////////////////////////////////////////
生成了libexample.so;
调用动态库
#include <streamio.h>
#include <dlfcn.h>
#include example.h
typedef int (* SHOWWIDGET)();
int main(int argc,char * argc[])
{
void * _dll = NULL;
SHOWWIDGET widget;
_dll = dlopen("libexample.so",RTLD_LAZY);
if(dlerror() != NULL)
{
printf("dll open error \n");
return;
}
widget = (SHOWWIDGET)dlsym(_dll,"showwidget");
if(dlerror() != NULL)
{
printf("dll sym error \n");
widget = NULL;
return;
}
widget();
return 1;
}
调用该动态库,其结果是仅仅闪了一下,该界面不能够停留显示请问!各位大虾给看一下!

[ 此贴被XChinux在2006-09-19 00:00重新编辑 ]