Mac*_*gma 1 qt visual-studio-2010
Windows 7 SP1
MSVS 2010
Qt库4.8.4 for Windows(VS 2010)
Visual Studio加载项1.1.11 for Qt4
起初,我无法弄清楚为什么这个插槽没有触发:
connect (lineEdit, SIGNAL(textChanged(const QString &)),
this, SLOT(enableFindButton(const Qstring &)));
Run Code Online (Sandbox Code Playgroud)
差异清楚地表明:Qstring应该是QString.
我的问题:为什么要编译?事实上,它将编译为:
connect (lineEdit, SIGNAL(textChanged(const nonsense &)),
this, SLOT(enableFindButton(const more_nonsense &)));
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?为什么这不会引起错误?
据我所知并理解Qt是如何工作的,连接线在运行时工作,而不是在编译时工作.这意味着当代码流到达该部分时,将执行连接信号和插槽所需的所有操作.
记住一些关于Qt的重要事情,一些调用只是宏,而不是C++函数.例如,您应该在类声明中添加"Q_OBJECT"行以启用信号和插槽机制,这是一个宏.此外,连接调用是一个宏(...),发出是一个宏等.一旦MOC(一个预编译器,将Qt宏转换为实际代码)分析您的代码,这些调用将扩展为实际代码.
另外,据我所知,我重复的信号/插槽机制是在运行时工作,而不是编译时.如果您阅读了连接宏的文档,它会说放在那里的"SIGNAL"和"SLOT"宏,将你放在那里的东西转换成字符串,显然,使用某种格式,这可能太复杂了手工使用,因此,由于它是一个在那里工作的字符串,编译无法检查字符串是否正确,在运行时检查.
我希望我的英语不好让你理解我,我希望我的知识足够大,不会说(太多)不正确的语言.
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |