Qt. сигналы и слоты в .so-библиотеке

Автор: pishtar Дата: 01.06.2004 15:31 доброе время суток
Проблема такова.
В моем приложении есть модули, написаные с использованием qt
Все получалось, пока не дошел до использования сигналов/слотов.
Для их использования необходим макрос Q_OBJECT, при использовании которого библиотека перестает (подключатся) extern "C" не решает проблемы.
Есть идеи?
Спасибо.
Re: qt. сигналы и слоты в .so-библиотеке 01.06.2004 20:54Cobalt Хм, а это как "библиотека перестает (подключатся)"?
что именно говорит компилятор?
Re: qt. сигналы и слоты в .so-библиотеке 02.06.2004 00:44pishtar Cobalt писал(а):

> Хм, а это как "библиотека перестает (подключатся)"?
> что именно говорит компилятор?
>
Компилятор ничего не говорит, библиотека, разумеется, компилируется.
Но основное приложение не "подхватывает" эту библиотеку.
Для ознакомления:

makefile библиотеки. (Я грешу на него, поскольку про moc ничего не сказано, научите, плиз)
---


CPP = gcc


CFLAGS = -Wall -I/usr/X11R6/include -I$(QTDIR)/include -L/usr/X11R6/lib -L$(QTDIR)/lib -lqt
BIN = companies_plug.so

OBJFILES = companies_plug.o

default: $(OBJFILES)
$(CPP) -o $(BIN) $(OBJFILES) $(LIBS) -shared

clean:
rm -f $(BIN) *~ *.o core #*

linecount:
cat *.c *.cpp *.h | wc -l

fixme:
ls *.c *.cpp *.h | xargs grep -i fixme

%.o: %.c
$(CPP) $(CFLAGS) -c $< -o $@

%.o: %.cpp
$(CPP) $(CFLAGS) -c $< -o $@

---
Возможно ли создать make для либы используя qmake?

Код либы:
companies_plug.cpp
---
#include "companies.h"

void Action(QWidget *parent)
{
companies form;
form.exec();
}

void getName(QString * name){
name->sprintf("companies";-);
}

---
companies.h
---
#ifndef COMPANIES_H
#define COMPANIES_H

#include <qvariant.h>
//и все нужные инклюды


#ifdef __cplusplus
extern "C" {
#endif


void Action( QWidget *parent);
void getName(QString * name);

#ifdef __cplusplus
}
#endif

class companies : public QDialog
{
//тут должен стоять Q_OBJECT

//тут описание формы
// в конструкторе нужна функция connect()
//которая не работает без макроса Q_OBJECT
//с этим макросом либа не компалится
}

---
Re: qt. сигналы и слоты в .so-библиотеке 02.06.2004 18:11AKsoft moc необходим полюбому. signal, slot - все это qt-расширение С++. В стандарте этого нет. moc генерирует стандартный С++ код, в котором сигналы и слоты по сути - методы базового объекта QT - QObject.
Re: qt. сигналы и слоты в .so-библиотеке 03.06.2004 01:53pishtar AKsoft писал(а):

> moc необходим полюбому. signal, slot - все это qt-расширение
> С++. В стандарте этого нет. moc генерирует стандартный С++ код,
> в котором сигналы и слоты по сути - методы базового объекта QT
> - QObject.

Да, я почитал об этом, но только у меня не хватаят знаний по составлению make-файлов.
Приведите, пример создания такого make файла для вышеописанного кода, если не сложно.
И возможна ли генерация такого файла средствами qt?
Re: qt. сигналы и слоты в .so-библиотеке 04.06.2004 02:16pishtar Все оказалось очень просто, ребята из trolltech обо всем подумали, только почему то не документировали этого.
В свойствах проекта TEMPLATE нужно установить в lib
можно это сделать вручную в pro файле. Далее как обычно-
qmake -o Makefile myproject.pro
В проекте вместо main функции соответсвенно экспортируемые функции,
и не забыть про
---
#ifdef __cplusplus
extern "C" {
#endif

//Описание экспортируемых функций


#ifdef __cplusplus
}
#endif
---
Всем спасибо за участие
Re: qt. сигналы и слоты в .so-библиотеке 25.06.2004 17:34AKsoft Документировали. В Qt Assistant (из хелпа дизайнера вызывается). Доки по qmake вполне хорошо расписаны.
RSS-материал