Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Zmeishe от Январь 17, 2008, 13:03



Название: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Zmeishe от Январь 17, 2008, 13:03
Есть classA: public QObject со своими сигналами и слотами. Он оформлен в библиотеку.
Есть classB: public classA, public QAbstractTableModel с дополнительным сигналом. Оформлен в другую библиотеку.
Компилятор сообщает об ошибке
.moc\moc_classB.cpp:78: error: `QObject' is an ambiguous base of `classB'

Код:
// SIGNAL 0
void classB::sendMySignal(QDataSet * _t1, const QString & _t2, QUpdateStatus _t3)
{
    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)), const_cast<void*>(reinterpret_cast<const void*>(&_t3)) };
78 строка    QMetaObject::activate(this, &staticMetaObject, 0, _a);
}

Если classB не имеет сигналов, то всё компилиться и работает.
Вообще можно так наследоваться или нет. Или classA наследовать не от QObject, а сразу от QAbstractTableModel ?


Название: Re: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Sergeich от Январь 17, 2008, 14:06
Курим ассистант:
Цитировать
If you are using multiple inheritance, moc assumes that the first inherited class is a subclass of QObject. Also, be sure that only the first inherited class is a QObject.


Название: Re: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Danila_Bagrofff от Октябрь 12, 2012, 10:07
то есть вот так нельзя сделать наследование?

class ParamsWidget : public QWidget , public QThread, так как оба отнаследованы от QObject...


Название: Re: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Пантер от Октябрь 12, 2012, 10:31
то есть вот так нельзя сделать наследование?

class ParamsWidget : public QWidget , public QThread, так как оба отнаследованы от QObject...
Нафиг такое извращение?


Название: Re: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Bepec от Октябрь 12, 2012, 12:07
Это что-то ужасное получается. Гуи Виджет в основном потоке, пытающийся перейти в другой поток? Ужасть.


Название: Re: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Igors от Октябрь 12, 2012, 12:13
Ну почему извращение, что хотелось понятно - активность/результаты привязаны к этому виджету. Да, такое наследование не будет корректно работать в Qt (хотя правилам языка не противоречит). Без ущерба для здоровья можно сделать указатель на QThread членом виджета или наоборот. Библия очень хорошо этот случай описывает ("альтернатива членство-наследование").


Название: Re: Сигналы в наследнике от двух классов потомков QObject
Отправлено: Danila_Bagrofff от Октябрь 12, 2012, 12:39
Надо было, потому как большая гуи форма с чтением большого кол-ва доп. параметров. Хотелося в поток все построение выкинуть - чтобы не "подвисало" все добро...

Выкинул чтение спец.параметров в отдельный поток - стало пошустрее. Сначала было лень так делать =) Вот и захотел отнаследоваться от обоих классов, чтобы не заморачиваться описанием отдельного класса-потока =)