5. 构造函数不能用在signals或者slots声明区域内。
的确,将一个构造函数放在signals或者slots区内有点不可理解,无论如何,不能将它们放在private slots、protected slots或者public slots区内。下面的用法是不合语法要求的:
class SomeClass : public QObject { Q_OBJECT public slots: SomeClass( QObject *parent, const char *name ) : QObject( parent, name ) {} // 在槽声明区内声明构造函数不合语法 [...] };
6. 函数指针不能作为信号或槽的参数。
例如,下面的例子中将void (*applyFunction)(QList*, void*)作为参数是不合语法的:
class someClass : public QObject { Q_OBJECT [...] public slots: void apply(void (*applyFunction)(QList*, void*), char*); // 不合语法 };
你可以采用下面的方法绕过这个限制:
typedef void (*ApplyFunctionType)(QList*, void*); class someClass : public QObject { Q_OBJECT [...] public slots: void apply( ApplyFunctionType, char *); };
7.信号与槽不能有缺省参数。
既然signal->slot绑定是发生在运行时刻,那么,从概念上讲使用缺省参数是困难的。下面的用法是不合理的:
class SomeClass : public QObject { Q_OBJECT public slots: void someSlot(int x=100); // 将x的缺省值定义成100,在槽函数声明中使用是错误的 };
8.信号与槽也不能携带模板类参数。
如果将信号、槽声明为模板类参数的话,即使moc工具不报告错误,也不可能得到预期的结果。 例如,下面的例子中当信号发射时,槽函数不会被正确调用:
[...] public slots: void MyWidget::setLocation (pair<int,int> location); [...] public signals: void MyObject::moved (pair<int,int> location);
|