分类: LINUX
2011-05-20 18:52:30
The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define signals or slots
只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制
QT的信号与槽机制介绍
http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/index.html
A Small Example
A minimal C++ class declaration might read:
class Counter
{
public:
Counter() { m_value = 0; }
int value() const { return m_value; }
void setValue(int value);
private:
int m_value;
};
A small QObject-based class might read:
#include
class Counter : public QObject
{
Q_OBJECT
public:
Counter() { m_value = 0; }
int value() const { return m_value; }
public slots:
void setValue(int value);
signals:
void valueChanged(int newValue);
private:
int m_value;
};
比如编写事件接口等程序时,有时会出现如下问题:
在PC端成功编译,但在开发板端却显示错误:
QObject::connect: No such slot QWidget::*******()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')
这时候,就必须在头文件派生类的时候,首先像下面那样引入Q_OBJECT宏:
class MyMainWindow : public QWidget
{
Q_OBJECT
......
}