• 8314阅读
  • 9回复

关于SIGNAL()和SLOT()这两个宏 [复制链接]

上一主题 下一主题
离线luodike
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-06
在Qt4的书上看到

宏SIGNAL()和SLOT()返回其参数的C风格的字符串(const char *),因此下面关联信号和槽的两个语句是等同的:
connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));
connect(pushButton,"clicked()",this,"close()");

尝试了一下,第二个语句虽然可以通过编译,但是点击的之后dialog并没有close
求解
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-06
引用楼主luodike于2009-12-06 09:53发表的 关于SIGNAL()和SLOT()这两个宏 :
在Qt4的书上看到

宏SIGNAL()和SLOT()返回其参数的C风格的字符串(const char *),因此下面关联信号和槽的两个语句是等同的:
connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));
connect(pushButton,"2clicked()",this,"1close()");
.......


你看的书叫啥名字的,竟有这种错误
离线luodike
只看该作者 2楼 发表于: 2009-12-06
引用第1楼dbzhang800于2009-12-06 12:00发表的  :
你看的书叫啥名字的,竟有这种错误

精通Qt4编程
编译能通过应该不能算是错误吧
离线dbzhang800

只看该作者 3楼 发表于: 2009-12-06
引用第2楼luodike于2009-12-06 16:21发表的  :
精通Qt4编程
编译能通过应该不能算是错误吧


编译通过只能说明没有语法错误。更多的错误是编译器无法检测出来的,不然debug也不会这么痛苦了。

对于connect来说,只要那两个参数是const char * ,不管内容是什么,编译都不会有问题。(但你的要求肯定是 运行没问题 吧)
离线uhmn
只看该作者 4楼 发表于: 2009-12-06
引用楼主luodike于2009-12-06 09:53发表的 关于SIGNAL()和SLOT()这两个宏 :
在Qt4的书上看到

宏SIGNAL()和SLOT()返回其参数的C风格的字符串(const char *),因此下面关联信号和槽的两个语句是等同的:
connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));
connect(pushButton,"clicked()",this,"close()");
.......


这书的作者太不负责任了。。。
离线foxyz

只看该作者 5楼 发表于: 2009-12-07
呵呵,有趣!  楼主,我告诉你, 从单纯宏的角度, 你说的没错,不过上边的宏作用不只是宏,还是一个关键字.QT会根据这个生成一段代码
离线dbzhang800

只看该作者 6楼 发表于: 2009-12-07
引用第5楼foxyz于2009-12-07 10:43发表的  :
呵呵,有趣!  楼主,我告诉你, 从单纯宏的角度, 你说的没错,不过上边的宏作用不只是宏,还是一个关键字.QT会根据这个生成一段代码


这个应该是说反了,(1) 单纯从宏的角度看就错了,(2) Qt的moc不会对这两个宏进行进一步处理。可以正常工作的代码我前面也给出来了

具体一点
这两个宏大致是下面的这样子的:
  1. #define SIGNAL(a)  "2"#a
  2. #define SLOT(a) "1"#a
离线daily8321

只看该作者 7楼 发表于: 2009-12-11
不想写connect 就使用QMeta::invokeMethod(*,*,*).楼上的对Qt 研究很有心得嘛
离线sbtree
只看该作者 8楼 发表于: 2009-12-11
楼主对宏的概念还没理解,你们谈的已经很远了。
windows 7 + VC++2008 + Qt4.5.2
离线cspp

只看该作者 9楼 发表于: 2009-12-12
编译过不等于没问题
比如
if(i = 1)
{
    //DoSomeThing
}
快速回复
限100 字节
 
上一个 下一个