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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.3.2] Что есть QMetaMethod::Method?  (Прочитано 4527 раз)
Dodge
Гость
« : Декабрь 05, 2007, 14:30 »

В классе QMetaMethod есть метод methodType, возвращающиий тип метода. С сигналом и слотом все ясно, а вот что в данном случае будет являтся методом? Погонял это дело на своих и qt'шных классах (наследованных от qobject), и ни разу не наткнулся на метод с таким типом.

Поясню откуда у вопроса ноги растут. Из Qt Script'а мозно вызывать методы объектов зарегестрированных в движке, но только методы с типом сигнал/слот, т.о. к обычному паблику из скрипта не добраться. Получается что, если хочешь использовать qt'шный класс в скрипте, то буть добр оберни, и сделай все нужные функции слотами. Бред.

Тут пришла в голову мысля(от сотрудника Смеющийся), что если можно получить доступ к мета-методам, то можно написать ретранслятор, который бы в себе мог создовать(в динамике) слоты, к которым можно приконнектится(тоже в динамике), и при их вызове вызывать соответствующие методы у целевого объекта.

Мысли есть какие нибуть?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Декабрь 05, 2007, 14:53 »

Непойму зачем городить такой огород. Чем собственно не устраивает слот?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dodge
Гость
« Ответ #2 : Декабрь 05, 2007, 14:59 »

Я согласен что это огород, но:
1. Очень интересная конструкция.
2. Универсальность, ретранслятору можно былобы подсунуть любой объект, сконфигурить его и дальше не парится.
3. Надаж всетаки узнать что есть QMetaMethod::Method Смеющийся
Записан
vaprele07
Гость
« Ответ #3 : Декабрь 05, 2007, 15:20 »

см Q_INVOKABLE
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Декабрь 05, 2007, 15:23 »

Можно закрутить цикл и проверить что есть что (сам лично никогда это не использова). Ну например так:


Код:
QMetaObject *meta_object = <some_object>->metaObject();

for (int i = 0; i < meta_object->methodCount(); ++i) {
    QMetaMethod meta_metod = meta_object->method(i);
    switch(meta_metod.methodType()) {
        case QMetaMethod::Signal:
            <do_something>
            break;
         case QMetaMethod::Slot:
            <do_something>
            break;
          case QMetaMethod::Method:
            <do_something>
            break;
    }
}

В каждой ветке свича можно вывести информацию: parameterNames, parameterTypes, signature etc.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dodge
Гость
« Ответ #5 : Декабрь 05, 2007, 17:19 »

Можно закрутить цикл и проверить что есть что (сам лично никогда это не использова). Ну например так:


Код:
QMetaObject *meta_object = <some_object>->metaObject();

for (int i = 0; i < meta_object->methodCount(); ++i) {
    QMetaMethod meta_metod = meta_object->method(i);
    switch(meta_metod.methodType()) {
        case QMetaMethod::Signal:
            <do_something>
            break;
         case QMetaMethod::Slot:
            <do_something>
            break;
          case QMetaMethod::Method:
            <do_something>
            break;
    }
}

В каждой ветке свича можно вывести информацию: parameterNames, parameterTypes, signature etc.
Это вообще к чему?

vaprele07 спс, разобрался.

QMetaMethod::Method это метод класса объявленный в секции паблик с исп макроса Q_INVOKABLE.
Например:
Код:
class MyTest : public QObject {
public:
    ...
    Q_INVOKABLE void test();
    void test2();

};
test и будет иметь тип - метод.

Меня интересует почему в данном случае test2 не является мета-методом... о нем вообще отсутствует информация в мета обжекте... сразу напрашивается следующее: метакомилятор не может отличить конструктор/диструктор объекта от метода.
Позже проверю и выложу результаты дабы полностью закрыть тему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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