|
个人分析: 一.LCDRange类 1.slider信号valueChanged(int)关联到lcd槽display(int),用于这两个部件显示值的同步改变 2.slider信号valueChanged(int)关联到LCDRange类自定义信号valueChanged(int),局部部件值改变时用于全局通知,便于同类外进行通信 3.LCDRange类留有外部接口: void setValue(int value); void setRange(int minValue,int maxValue); 用于更新本类中的QSlider变量的值 二.CannonField类 1..对外留有setAngle(int)槽用于更新本类currentAngle变量的值 2.在setAngle(int)调用最后进行update()更新引发paintEvent()事件进行重绘,同时发射自定义信号angleChanged(int),用于类外通信 3.CannonField类从父类继承paintEvent事件进行窗体重绘 三.main主程序分析 1. 构造一个LCDRange对象和CannonField对象 2.将LCDRange/valueChanged信号关联到CannonField/setValue槽 3.将CannonField/angleChanged信号关联到 LCDRange/setValue槽 其他测试: 如果把update()注释掉,则就不会引发paintEvent事件,窗体就不会更新 但是如果将emit angleChanged(int)注释掉,则对结果不产生任何影响,因为CannonField类是不可编辑(即不像QSlider可以自由改变值,所以这步也不可以 不做) 由此看来把这句注释掉对效果也不产生任何影响: //connect(cannonField,SIGNAL(angleChanged(int)),angle,SLOT(setValue(int)));
说明: 本人的一些之见而已,仅供参考,不负任何法律责任.
|