И еще, хочу в программе отображать виджет, созданный в библиотеке (библиотека должна им управлять, реагировать на сигналы и т.д.), программа только отображать. Сделал так:
*.h библиотеки:
extern "C" {
QString Test();
QWidget *widget();
}
class MyLib : public QObject
{
Q_OBJECT
public:
MyLib();
struct {
QLabel *label;
QPushButton *button;
} w;
QWidget *widget;
private slots:
void tim();
};
*.cpp библиотеки:
MyLib lb; // создаем класс
QString Test(){return lb.Test();}
QWidget *widget() {return lb.widget;}
MyLib::MyLib()
{
qDebug() << "MyLib";
widget = new QWidget();
widget->setLayout(new QVBoxLayout);
widget->layout()->addWidget(w.label = new QLabel());
widget->layout()->addWidget(w.button = new QPushButton("Update"));
connect(w.button, SIGNAL(clicked()), this, SLOT(tim()));
}
void MyLib::tim()
{
w.label->setText(QDateTime::currentDateTime().toString());
}
*.cpp программы:
QLibrary *lib = new QLibrary("d:/MyLib1.dll", this);
qDebug() << lib->load();
typedef QWidget* (*Fct) ();
Fct fct = (Fct)(lib->resolve("widget"));
QWidget *w = fct();
ui->tabWidget->addTab(w, "dgdg");
Работает нормально, единственная проблема - если добавлять виджет не на таб, а к примеру, в компоновщик главного окна, то программа не реагирует на мышь (ни контролы виджета библиотеки, ни контролы, созданые в программе). Но предполагается, что в реальной программе будет именно создаваться новый таб.
Чтобы не накосячить, хочу поинтересоваться, на сколько правильное мое решение?