Russian Qt Forum

Qt => Общие вопросы => Тема начата: soulsaver от Январь 20, 2012, 09:26



Название: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: soulsaver от Январь 20, 2012, 09:26
Дело в том, что пока созданный руками класс не унаследуешь от какого нить предка (или самого) QObject макросс Q_OBJECT воспринимается компилятором как набор не нужных символов)). Извините за столь странный вопрос), но класс без поддержки слотов мне не нужен, да и огромный QObject тоже не хочется наследовать для своих целей, в котором будет валяться груз 200 из сотен методов и свойств. Спасибо за ответы )


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: Пантер от Январь 20, 2012, 09:55
Сигналы/слоты работают только у наследников QObject.


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: popper от Январь 20, 2012, 09:55
Из справки:
Цитировать
This macro requires the class to be a subclass of QObject

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

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

Сам класс QObject содержит не так уж много методов. Не вижу каких-либо проблем с наследованием.


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: soulsaver от Январь 20, 2012, 10:13
понял(. спасибо большое. ну да, куда деваться, от QObject буду наследовать). просто хотелось чтоб было все красиво(и даже в оперативе бы по меньше лежало хлама, понимаю что сейчас этим можно принебречь), только мои методы и.т.д.)) но это действительно очень жирно, репа бы треснула если можно было бы)))). Спасибо большое). Еще даже может подумаю, буду вызывать слоты главного виджета а они в свою очередь вызывают обычные функции класса созданного руками, но это наверно не стоит выделки), ничего я от этого не выйграю, кроме 500кб оперативной памяти ).


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: mutineer от Январь 20, 2012, 11:49
просто хотелось чтоб было все красиво(и даже в оперативе бы по меньше лежало хлама, понимаю что сейчас этим можно принебречь), только мои методы и.т.д.))

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


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: Авварон от Январь 20, 2012, 22:49
просто хотелось чтоб было все красиво(и даже в оперативе бы по меньше лежало хлама, понимаю что сейчас этим можно принебречь), только мои методы и.т.д.))

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

Давно?


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: mutineer от Январь 21, 2012, 10:20
не знаю, предыдущие версии не смотрел. при выполнении connect макросы SIGNAL и SLOT преобразовывают переданные значения в строки. Может, конечно, найденный метод кешируется и находится по строковому имени только при connect, а дальше используются цифровые значения

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


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: Авварон от Январь 21, 2012, 10:34
не знаю, предыдущие версии не смотрел. при выполнении connect макросы SIGNAL и SLOT преобразовывают переданные значения в строки. Может, конечно, найденный метод кешируется и находится по строковому имени только при connect, а дальше используются цифровые значения
Это правда. Метод вызывается по ид а не по строке.


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: Gorthauer от Январь 21, 2012, 12:45
не знаю, предыдущие версии не смотрел. при выполнении connect макросы SIGNAL и SLOT преобразовывают переданные значения в строки. Может, конечно, найденный метод кешируется и находится по строковому имени только при connect, а дальше используются цифровые значения

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

По символьному представлению они только в момент connect'а связываются, потом методы вызываются по обычному целочисленному смещению. Посмотрите для интереса содержимое moc файлов. По стринговому id методы вызваются только через QMetaMethod::invoke, но это редко когда нужно да и обычно такие методы весьма редко вызываются. И да, в Qt5 связывание сигналов со слотами можно будет делать в compile time!


Название: Re: Q_OBJECT в пустом не наследуемом классе, возможно?
Отправлено: mutineer от Январь 23, 2012, 11:50
Да, посмотрел, действительно строки играют роль только при коннекте. Извиняюсь, был неправ