Russian Qt Forum

Qt => Общие вопросы => Тема начата: developer от Октябрь 30, 2008, 13:11



Название: QMetaObject
Отправлено: developer от Октябрь 30, 2008, 13:11
Вопрос ко всем.

Есть класс
Код:
class PaintPath: public QObject, public QPainterPath
{
Q_OBJECT
public:
void firstMethod(){}
};

Где то в коде вызываю
Код:
path->metaObject()->methodCount();
path - ето екземпляр класса PaintPath. Етот вызов возвращает мне число 4 - тоесть он видит только 4 метода (ето слоты и сигналы класса  QObject). Но не видит firstMethod(). Как только я делаю firstMethod() слотом, только тогда metaObject()->methodCount() видит етот метод. А мне нужно что-бы он видел еще и методы класса PaintPath, то-есть я не хочу делать firstMethod() слотом.


Название: Re: QMetaObject
Отправлено: ритт от Октябрь 30, 2008, 13:46
metaObject()->methodCount() возвращает кол-во слотов + сигналов для данного класса
либо делай firstMethod слотом, либо ищи другие пути


Название: Re: QMetaObject
Отправлено: developer от Октябрь 30, 2008, 14:10
Я уже читал ассистант, так оно и есть к сожалению. Ну, буду как-то выкручиваться


Название: Re: QMetaObject
Отправлено: Rcus от Октябрь 30, 2008, 14:20
А чем обусловлено нежелание делать метод слотом? от этого он не перестанет быть методом, отличие только в том что moc сгенерит метаинформацию для данного метода


Название: Re: QMetaObject
Отправлено: developer от Октябрь 30, 2008, 15:23
он не может возвращать значение, и приходится вызывать нужную функцию из тела етого слота, по моему ето несколько накладние расходы


Название: Re: QMetaObject
Отправлено: ритт от Октябрь 30, 2008, 15:32
почему не может?


Название: Re: QMetaObject
Отправлено: Rcus от Октябрь 30, 2008, 15:41
помоему здесь есть недопонимание принципа работы moc.
слот это тот же метод, просто для него moc генерирует метаинформацию, что позволяет вызывать его сигналами, привязывать к скриптам, вызывать по имени и прочее
например
Цитировать
bool QWidget::close ()   [slot]

Closes this widget. Returns true if the widget was closed; otherwise returns false


Название: Re: QMetaObject
Отправлено: developer от Октябрь 30, 2008, 15:53
Во блин, а думал, что по куте знаю многое. А тут такое. Ну спасибо, открыли глаза. :D


Название: Re: QMetaObject
Отправлено: SASA от Октябрь 30, 2008, 19:12
помоему здесь есть недопонимание принципа работы moc.
слот это тот же метод, просто для него moc генерирует метаинформацию, что позволяет вызывать его сигналами, привязывать к скриптам, вызывать по имени и прочее
например
Цитировать
bool QWidget::close ()   [slot]

Closes this widget. Returns true if the widget was closed; otherwise returns false

Я б не советовал использовать слоты с возвращаемым значением.
Раньше тоже думал, что всё хорошо. Но потом обнаружил, что при вызове из другого потока возвращаемое значение пропадает. Так что, аккуратнее.


Название: Re: QMetaObject
Отправлено: Rcus от Октябрь 30, 2008, 19:35
Что значит при вызове из другого потока пропадают?
Ежели вы говорите об асинхронном вызове, то конечно, иначе никак.


Название: Re: QMetaObject
Отправлено: SASA от Октябрь 30, 2008, 19:44
Так я и говорю: "Аккуратнее." ;)