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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMetaObject  (Прочитано 5993 раз)
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() слотом.
Записан
ритт
Гость
« Ответ #1 : Октябрь 30, 2008, 13:46 »

metaObject()->methodCount() возвращает кол-во слотов + сигналов для данного класса
либо делай firstMethod слотом, либо ищи другие пути
Записан
developer
Гость
« Ответ #2 : Октябрь 30, 2008, 14:10 »

Я уже читал ассистант, так оно и есть к сожалению. Ну, буду как-то выкручиваться
Записан
Rcus
Гость
« Ответ #3 : Октябрь 30, 2008, 14:20 »

А чем обусловлено нежелание делать метод слотом? от этого он не перестанет быть методом, отличие только в том что moc сгенерит метаинформацию для данного метода
Записан
developer
Гость
« Ответ #4 : Октябрь 30, 2008, 15:23 »

он не может возвращать значение, и приходится вызывать нужную функцию из тела етого слота, по моему ето несколько накладние расходы
Записан
ритт
Гость
« Ответ #5 : Октябрь 30, 2008, 15:32 »

почему не может?
Записан
Rcus
Гость
« Ответ #6 : Октябрь 30, 2008, 15:41 »

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

Closes this widget. Returns true if the widget was closed; otherwise returns false
Записан
developer
Гость
« Ответ #7 : Октябрь 30, 2008, 15:53 »

Во блин, а думал, что по куте знаю многое. А тут такое. Ну спасибо, открыли глаза. Веселый
Записан
SASA
Гость
« Ответ #8 : Октябрь 30, 2008, 19:12 »

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

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

Я б не советовал использовать слоты с возвращаемым значением.
Раньше тоже думал, что всё хорошо. Но потом обнаружил, что при вызове из другого потока возвращаемое значение пропадает. Так что, аккуратнее.
Записан
Rcus
Гость
« Ответ #9 : Октябрь 30, 2008, 19:35 »

Что значит при вызове из другого потока пропадают?
Ежели вы говорите об асинхронном вызове, то конечно, иначе никак.
Записан
SASA
Гость
« Ответ #10 : Октябрь 30, 2008, 19:44 »

Так я и говорю: "Аккуратнее." Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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