错误一
...: 错误:'staticMetaObject' is not a member of 'Ui_Start_Form'
...:错误:'qt_metacast' is not a member of 'Ui_Start_Form'
...: 错误:'qt_metacall' is not a member of 'Ui_Start_Form'
解决方案:当多继承的时候,要将QObject放在前面,即将类的声明改为
class Start : public QObject,public QGraphicsItem
/********************************************************************/
【错误2】
error: argument of type `void (CTest::)(int) ' does not match `void (*)(int) '
代码如下:
void CTest::handle_signal(int s)
{
printf( "ctrl+c\n ");
exit(1);
}
void CTest::initsignal()
{
signal(SIGINT, handle_signal);
}
void CTest::start()
{
initsignal();
init();
}
但是把代码改成handle_signal移出类CTest就可以通过,并且运行正常,这是为什么呢,不移出类的话,我试过很多改动都不行,请高手指点一下,谢谢.
原因:因为signal的处理函数只能有一个,否则的话就不知道到底要调用哪个函数了。
类的成员函数与类的个数相关,比如:定义
CTest a,b,就会有2个void CTest::handle_signal(int s)。
你编程序时希望类a调用a的handle_signal,类b调用b的handle_signal,但系统没这么聪明。
说复杂点,其实以上的说法不完全正确,具体实现时,a和b的handle_signal地址是相同的,但隐藏了一个This的指针,使用single时,造成参数不统一。
而static函数仅有一份,也不包含隐藏的This的指针参数。
总而言之,single对应的必须是普通函数或static的类成员函数。