- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 一个槽是一个普通函数,只不过可以被连接到信号而已。它们并非必须被连接,你可以像任何其他函数一样调用一个槽,你也像通常一样实现它。 槽可以在public slots,protected slots和private slots的其中以段中声明。这些访问约束在调用函数时会如所想般工作,但是私有槽和保护槽可以被连接到任何其他信号,所以它们可以从类外被触发。 槽可以返回值,但是连接不可携带返回参数。 任何数量的信号可以被连接到单独一个槽。这表示单独一个槽可以数个事件源 – 想象键盘快捷键,按钮等等。 待续 * 信号定义在信号段。这个段可以看作保护的,这样一个信号就仅可以在一个类或它的派生类内部发射。 信号总是返回void,而绝不能被执行。相反,moc提供函数体以触发实际的槽激活代码(slot-activation-code)。 以讹信号可以被连接到任何数量的槽,所以一个单独事件可以触发多重反应。 跨线程连接信号和槽是完全可能的。第三方库如Qxt (/0.5.0/classQxtRPCPeer.html)。 在信号发射类里面,你使用emit关键字来发射信号。 待续 * 你可以在任何两个QObject之间建立信号和槽的连接。 Qt会验证信号和槽的签名的匹配。签名由信号和槽的名字接参数类型组成。 签名中绝不可有值或者变量名。 这里也建议坚持使用标准类型,比如自定义类型ItemClass减低了重用能力,故需要回避。 待续 * 当匹配签名时,Qt非常宽容。基本规则是Qt不能创建或转换值,而除此之外的任何事都可以(即跳过参数)。 幻灯片中的例子论证了这一点。错误是(从上面开始): 缺少最后的int(不能创建) QString与int不匹配(不能转换) 缺失仅有的int(不能创建) 待续 * 当从设计器把建立连接到你自己的代码的时候,Qt使用自动连接机制。 它让信号自动连接到具有相应名字的槽(幻灯片中的结构和例子)。 当connectSlotsByName被调用的时候自动连接被建立。它由设计器生成的setupUi函数最终完成。 当使用这种机制的时候,考虑可重用性。有时候手写一对连接声明可以很好地提升代码的可读性。 待续 * 信号和槽的一个常见场景是同步一对部件。 这是由两个互连的对象实现的。(参考例子)。如果dial1的值发生变化,它会发出valueChanged, 使到dial2的值改变,而这个改变会发出valueChanged,使到dial1的值改变,如此反复…… 为避免无限循环(其结果是无尽的循环,使到堆栈增长到溢出内存而悲惨地崩溃),setValue函数会忽略设置当前值的尝试。 * 要向类里添加自定义信号和槽很容易。 你可以为多种原因添加槽。比如,为每一个以及所有可能的用户动作(文件打开,保存,关闭,复制,剪切,粘帖,帮助,关于)。Setter函数也会构造自然槽。 添加槽仅仅是把你的函数放进正确的声明段中而已。 增加信号一样简单,仅需在信号段中声明它们。 如果你有属性,按惯例要用Q_PROPERTY宏把信号通知Qt。 待续 * 实现槽就像实现普通函数。但是你绝不能忘记无限循环保护。 发射信号就像调用emit signalName(arguments)那么简单。 当发射信号时,确保首先更新内部状态,以便在取信息之前你的对象是最新的。 * 让我们看一个真实的例子,就是往情景中稍微添加更多复杂的东西。 我们会使用两个表盘 – LCD对并用我们自定义的TempConverter类互连它们以实现摄氏度与华氏度之间的转换。 这不单是转换,它会监控并在变化发生时发射信号。 待续 * 对话框包含一个TempConverter对象和用户界面。 用户界面分成两半 – 一半是摄氏度而另一半是华氏度。每个都由一个QGroupBox组成。 组框中每一个都包含一个QDial和一个QLCDNumber。 待续 * TempConverter类声明。 在可以添加信号和槽之前,我们需要QObject父对象和Q_OBJECT。 Setter是槽。 每一个温度的改变都有对应信号。 为避免无限循环我们必须有一个“当前”温度。在这个例子中我们已经决定将其控制为摄氏度。 鉴于我们由始至终使用整数值,所以从温度转换的角度看不会非常准确。 待续 * 看槽实现, setTempCelsius槽包含了循环锁,因为“当前”温度控制为摄氏度。然后它会更新内部状态并发射两个信号。 注意华氏度信号的参数由getter函数取回,实现从C到F的转换。 设定华氏度的槽转换温度(从F到C)并使用设定摄氏度函数。 待续 * 构成应用程序的窗口有四个部件组成(摄氏度和华氏度的表盘 + LCD)以及一个TempConverte
您可能关注的文档
- 《可能性大小》汽车区七校.ppt
- 《落跑甜心》植入营销招商方案.pptx
- 《卜算子·咏梅》课件赏识.ppt
- 《测树学》实验课教学.ppt
- 1计算机科学应用基础.ppt
- WCDMA空中接口及无线技术.ppt
- 《工程运筹学》教学案卷.ppt
- 社区网络口碑推广策略方案.ppt
- 《现代物流概论》课件.ppt
- 关于伟大的历史转折.ppt
- 基本面选股组合月报:大模型AI选股组合本年超额收益达6.60.pdf
- 可转债打新系列:安集转债,高端半导体材料供应商.pdf
- 可转债打新系列:伟测转债,国内头部第三方IC测试企业.pdf
- 联想集团PC换机周期下的价值重估.pdf
- 计算机行业跟踪:关税升级,国产突围.pdf
- 科技类指数基金专题研究报告:详解AI产业链指数及基金布局.pdf
- 计算机行业研究:AIAgent产品持续发布,关税对板块业绩影响较小.pdf
- 民士达深度报告:国内芳纶纸龙头,把握变局期崛起机遇.pdf
- 社会服务行业动态:全球首张民用无人驾驶载人航空器运营合格证落地,霸王茶姬冲击美股IPO.pdf
- 通信行业研究:特朗普关税令落地,长期看好国产算力链.pdf
文档评论(0)