Я новичок в QT и просто тестирую MOC.
Для данного класса:
class Counter : public QObject
{
Q_OBJECT
int m_value;
public:
Counter() {m_value = 0;}
~Counter() {}
int value() {return m_value;}
public slots:
void setValue(int value);
signals:
void valueChanged(int newValue);
};
Я хочу получить список всех методов в классе, но, похоже, получаю только список сигналов и слотов, хотя документация говорит, что это должны быть все методы? Вот мой код:
#include <QCoreApplication>
#include <QObject>
#include <QMetaMethod>
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
const QMetaObject cntmo = Counter::staticMetaObject;
for(int i = 0; i != cntmo.methodCount(); ++i)
{
QMetaMethod qmm(cntmo.method(i));
cout << qmm.signature() << endl;
}
return app.exec();
}
Пожалуйста, будьте осторожны, это мой лучший к / п, возможно, я забыл включить некоторые заголовки.
Мой вывод:
destroyed(QObject*)
destroyed()
deleteLater()
_q_reregisterTimers(void*)
valueChanged(int)
setValue(int)
Кто-нибудь знает, почему это происходит? Qt не распознает
int value() {return m_value;}
как допустимый метод? Если так, то есть макрос, который я забыл или что-то в этом роде?
P.S. Я использую 4.6.2
UPDATE
Я забыл о реализации метода setValue
, но это не слишком сильно меняет мой фактический вопрос.
void Counter::setValue(int value)
{
if(value != m_value)
{
m_value = value;
emit valueChanged(value);
}
}