Russian Qt Forum
Ноябрь 02, 2024, 01:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигналы в наследнике от двух классов потомков QObject  (Прочитано 8661 раз)
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 ?
Записан
Sergeich
Гость
« Ответ #1 : Январь 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.
Записан
Danila_Bagrofff
Гость
« Ответ #2 : Октябрь 12, 2012, 10:07 »

то есть вот так нельзя сделать наследование?

class ParamsWidget : public QWidget , public QThread, так как оба отнаследованы от QObject...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 12, 2012, 10:31 »

то есть вот так нельзя сделать наследование?

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #4 : Октябрь 12, 2012, 12:07 »

Это что-то ужасное получается. Гуи Виджет в основном потоке, пытающийся перейти в другой поток? Ужасть.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Октябрь 12, 2012, 12:13 »

Ну почему извращение, что хотелось понятно - активность/результаты привязаны к этому виджету. Да, такое наследование не будет корректно работать в Qt (хотя правилам языка не противоречит). Без ущерба для здоровья можно сделать указатель на QThread членом виджета или наоборот. Библия очень хорошо этот случай описывает ("альтернатива членство-наследование").
Записан
Danila_Bagrofff
Гость
« Ответ #6 : Октябрь 12, 2012, 12:39 »

Надо было, потому как большая гуи форма с чтением большого кол-ва доп. параметров. Хотелося в поток все построение выкинуть - чтобы не "подвисало" все добро...

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


Страница сгенерирована за 0.046 секунд. Запросов: 22.