ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第七篇 Qt实现十字路口交通灯控制系统(六)

2021-07-07 10:02:17  阅读:210  来源: 互联网

标签:Qt 接收者 交通灯 QObject 第七篇 线程 connect 信号


第七篇 Qt实现十字路口交通灯控制系统(六)

1.最终效果

以下就是我设计出来的效果,没有录视频,就先这样了:
在这里插入图片描述在这里插入图片描述

2.相关问题解决

2.1.信号与槽问题

(1)用到信号和槽机制的类一定要有QObject这个基类
(2)关联方式
QObject::connect(发出者,SIGNAL(信号),接收者,SLOT(槽));
发出者和接收者都是地址,
如Car *car1;Car car2;这两个关联为
QObject::connect(car1,SIGNAL(信号),接收者,SLOT(槽));
QObject::connect(&car2,SIGNAL(信号),接收者,SLOT(槽));

还有一种方式是
QObject::connect(发出者,发出者类::信号名,接收者,接受者类::槽名);
QObject::connect(car1,Car::updateMain,接收者,Map::updateMyself);

2.2.线程问题

线程可以继承QThread也可以继承QRunnable类,两者都要重写run()函数。需要注意的是前者继承了QObject,而后者没有。使用后者并且要有信号和槽机制的话,要这样继承才不会报错:

class LoadTableRunable : public QObject , public QRunnable {
	Q_OBJECT
public:
	LoadTableRunable(QObject *parent);
	~LoadTableRunable();
	void run();
signals:
public slots:
};

问题:
线程问题这是因为没有结束掉线程,在相关地方添加关闭线程代码就好了:
我是在关闭事件中加的。

void Map::closeEvent(QCloseEvent *){
    control.terminate();
    controlcar.terminate();
    car->terminate();
    for(int i = 0;i < listAll.size();i++){
        listAll.at(i)->terminate();
    }
}

2.3.转弯问题

写下来感觉Qt的转弯虽然看起来还挺简单的,但没有javaSwing那样好,不过也许是我没有发现好的方法吧:
下面这篇文章说得很清楚,我主要用到第一种方法。
本来可以模拟车辆行驶更好的左转的,但是,Qt图片旋转会改变大小,所以左转也用了90度,会出现撞车的情况。

Qt实现图片旋转的两种方法

2.4.静态变量与静态函数

静态变量和静态函数可以一处声明,多处使用,和全局变量一样,但是面向对象讲究的就是封装性,是谁的就放在谁那里,而不是放在外面成为野孩子,所以才不建议使用extern。

Qt使用全局变量的两种方式

3.bug

出界访问这个问题不知道要怎么解决,因为在每个线程应该结束时我都把车子删除了,但我想了想,觉得应该是很多个线程同时进行时,线程a要释放了,但是又没有完全释放,所以线程b用到线程a时,a又刚好释放了,就越界了:比如我用的是listAll保存车子,那么应该是在删除车子a时,车子b要求重绘,又刚好访问到车子a,所以就出现了越界访问,因为时间间隔是64毫秒,还是有点短的。

4.结语

凑合吧。

标签:Qt,接收者,交通灯,QObject,第七篇,线程,connect,信号
来源: https://blog.csdn.net/weixin_49188222/article/details/118538822

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有