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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Q_OBJECT в пустом не наследуемом классе, возможно?  (Прочитано 4419 раз)
soulsaver
Гость
« : Январь 20, 2012, 09:26 »

Дело в том, что пока созданный руками класс не унаследуешь от какого нить предка (или самого) QObject макросс Q_OBJECT воспринимается компилятором как набор не нужных символов)). Извините за столь странный вопрос), но класс без поддержки слотов мне не нужен, да и огромный QObject тоже не хочется наследовать для своих целей, в котором будет валяться груз 200 из сотен методов и свойств. Спасибо за ответы )
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Январь 20, 2012, 09:55 »

Сигналы/слоты работают только у наследников QObject.
Записан

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

Из справки:
Цитировать
This macro requires the class to be a subclass of QObject

будет валяться груз 200 из сотен методов и свойств.

Сигналы и слоты преобразуются в стандартный код на этапе выполнения moc. В исполняемом модуле от них ничего не остается.

Сам класс QObject содержит не так уж много методов. Не вижу каких-либо проблем с наследованием.
Записан
soulsaver
Гость
« Ответ #3 : Январь 20, 2012, 10:13 »

понял(. спасибо большое. ну да, куда деваться, от QObject буду наследовать). просто хотелось чтоб было все красиво(и даже в оперативе бы по меньше лежало хлама, понимаю что сейчас этим можно принебречь), только мои методы и.т.д.)) но это действительно очень жирно, репа бы треснула если можно было бы)))). Спасибо большое). Еще даже может подумаю, буду вызывать слоты главного виджета а они в свою очередь вызывают обычные функции класса созданного руками, но это наверно не стоит выделки), ничего я от этого не выйграю, кроме 500кб оперативной памяти ).
Записан
mutineer
Гость
« Ответ #4 : Январь 20, 2012, 11:49 »

просто хотелось чтоб было все красиво(и даже в оперативе бы по меньше лежало хлама, понимаю что сейчас этим можно принебречь), только мои методы и.т.д.))

  Хочешь чтобы было красиво - не юзай сигналы-слоты, ибо они (о боже мой, какой кошмар!!!) используют код, вызывающий метод по его символьному имени (да-да, по строке)
« Последнее редактирование: Январь 21, 2012, 10:34 от mutineer » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Январь 20, 2012, 22:49 »

просто хотелось чтоб было все красиво(и даже в оперативе бы по меньше лежало хлама, понимаю что сейчас этим можно принебречь), только мои методы и.т.д.))

Хочешь чтобы было красиво - не юзай сигналы-слоты, ибо они (о боже мой, какой кошмар!!!) используют код, вызывающий метод по его символьному имени (да-да, по строке)

Давно?
Записан
mutineer
Гость
« Ответ #6 : Январь 21, 2012, 10:20 »

не знаю, предыдущие версии не смотрел. при выполнении connect макросы SIGNAL и SLOT преобразовывают переданные значения в строки. Может, конечно, найденный метод кешируется и находится по строковому имени только при connect, а дальше используются цифровые значения

ладно, не буду сейчас утверждать, в понедельник еще сорцы почитаю...
« Последнее редактирование: Январь 21, 2012, 10:33 от mutineer » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Январь 21, 2012, 10:34 »

не знаю, предыдущие версии не смотрел. при выполнении connect макросы SIGNAL и SLOT преобразовывают переданные значения в строки. Может, конечно, найденный метод кешируется и находится по строковому имени только при connect, а дальше используются цифровые значения
Это правда. Метод вызывается по ид а не по строке.
Записан
Gorthauer
Гость
« Ответ #8 : Январь 21, 2012, 12:45 »

не знаю, предыдущие версии не смотрел. при выполнении connect макросы SIGNAL и SLOT преобразовывают переданные значения в строки. Может, конечно, найденный метод кешируется и находится по строковому имени только при connect, а дальше используются цифровые значения

ладно, не буду сейчас утверждать, в понедельник еще сорцы почитаю...

По символьному представлению они только в момент connect'а связываются, потом методы вызываются по обычному целочисленному смещению. Посмотрите для интереса содержимое moc файлов. По стринговому id методы вызваются только через QMetaMethod::invoke, но это редко когда нужно да и обычно такие методы весьма редко вызываются. И да, в Qt5 связывание сигналов со слотами можно будет делать в compile time!
Записан
mutineer
Гость
« Ответ #9 : Январь 23, 2012, 11:50 »

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


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