public signals: 编译错误

yb0824 2009-11-06 09:35:26
如题
...全文
195 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgrammerNO1 2009-11-06
  • 打赏
  • 举报
回复
顶3楼~~
yb0824 2009-11-06
  • 打赏
  • 举报
回复
谢谢 winux.
我想写成 public signals:是因为我想这样触发信号 emit a.mySignal();
我现在想这样写行吗,
public:
void emitSignal() { emit mySignal(); }
这感觉就可以直接调用mySignal了。
liangjing91 2009-11-06
  • 打赏
  • 举报
回复
up
winux 2009-11-06
  • 打赏
  • 举报
回复

如果你还问为什么signal不能用public修饰,而slots就可以,因为slots在预编译后就变的没有了,不会出现重复。

这么设计的原因,Qt允许你想调用普通函数一样调用slot,所以slot必须要能够想普通函数一样规定访问级别(public, protected, private);而signal是不能被直接调用的,你必须通过消息槽连接。因此Qt强制把它定义成protected,这样你直接调用就会出编译错误。
winux 2009-11-06
  • 打赏
  • 举报
回复
再解释的详细点,
signal:
int mySignal(int arg);
预编译后就会变成
protected:
int mySignal(int arg);


如果定义的时候写成
public siagnal:
int mySignal
预编译后就变成
public protected:
int mySignal
显然是不能编译的
winux 2009-11-06
  • 打赏
  • 举报
回复
signal定义只要写成这样
signal:
int mySignal(int arg);
就行了,不要加public

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧