找回密码
 立即注册
收起左侧

如何自定义类,继承QThread类,在类中添加MainWindow

3
回复
8599
查看
[复制链接]
累计签到:5 天
连续签到:1 天
来源: 2018-3-25 09:49:38 显示全部楼层 |阅读模式
1Qter豆

QT刚刚开始接触,由于需要,基础的没开始弄就开始接触多线程,思路混乱的不行,请大神们帮忙


正在做这样一个东西,在Linux下的QT5.4.0,在同一个工程下,按照QT的多线程创建了两个线程,采用生产者与消费者的模型,生产者为C语言写的文件,c.c,首先它是一直监听接收数据,不跳出来,接收到数据后保存在数组a中,消费者是cpp.cpp,他的功能是当数组a中有数据,显示在mainwindow的界面中。

目前的状态是两个线程创建完毕,c.c在QT中已经引入,编译没有问题,cpp.cpp由于属于QThread类,无法在属于QMainWindow类,通过查资料需要自定义类继承QThread,在类中添加MainWindow的相关东西,参考的资料为https://blog.csdn.net/leoeitail/article/details/77880042
在这个工程下

                                                                            c.c为我C语言实现的功能,ceshi.cpp为mainwindow,changUI与例子一样,我现在不知道把生产者与消费者放在哪,消费者就是changeUI.cpp,生产者的声明和定义我放在了main.cpp中,我进行了编译,显示如下错误(由于我在ceshi.cpp和main.cpp中定义的两个线程,所以相应的在对应的头文件中加入了互斥锁,线程,waitcondition,的定义)
In file included from ceshi.h:6:0,
                 from main.cpp:16:
ChangeUI.h:8:16: error: redefinition of ‘QWaitCondition bufferEmpty’
QWaitCondition bufferEmpty;
                ^
main.cpp:11:16: error: ‘QWaitCondition bufferEmpty’ previously declared here
QWaitCondition bufferEmpty;
                ^
In file included from ceshi.h:6:0,
                 from main.cpp:16:
ChangeUI.h:9:16: error: redefinition of ‘QWaitCondition bufferFull’
QWaitCondition bufferFull;
                ^
main.cpp:12:16: error: ‘QWaitCondition bufferFull’ previously declared here
QWaitCondition bufferFull;
                ^
In file included from ceshi.h:6:0,
                 from main.cpp:16:
ChangeUI.h:11:8: error: redefinition of ‘QMutex mutex’
QMutex mutex;
        ^
main.cpp:14:8: error: ‘QMutex mutex’ previously declared here
QMutex mutex;
        ^






然后我把消费者的线程移到了ChangeUI相关下,由于mainwindow的头文件包含了ChangeUI的头文件,他显示如下错误
ChangeUI.o.bss+0x4): `bufferFull'被多次定义
ceshi.o.bss+0x4):第一次在此定义
ChangeUI.o.bss+0x0): `mutex'被多次定义
ceshi.o.bss+0x0):第一次在此定义
ChangeUI.o.bss+0x8): `bufferEmpty'被多次定义
ceshi.o.bss+0x8):第一次在此定义
main.o.bss+0x8): `bufferEmpty'被多次定义
ceshi.o.bss+0x8):第一次在此定义
main.o.bss+0x4): `bufferFull'被多次定义
ceshi.o.bss+0x4):第一次在此定义
main.o:(.bss+0x0): `mutex'被多次定义
ceshi.o:(.bss+0x0):第一次在此定义
moc_ceshi.o:(.bss+0x8): `bufferEmpty'被多次定义
ceshi.o:(.bss+0x8):第一次在此定义
moc_ceshi.o:(.bss+0x4): `bufferFull'被多次定义
ceshi.o:(.bss+0x4):第一次在此定义
moc_ceshi.o:(.bss+0x0): `mutex'被多次定义
ceshi.o:(.bss+0x0):第一次在此定义
moc_ChangeUI.o:(.bss+0x8): `bufferEmpty'被多次定义
ceshi.o:(.bss+0x8):第一次在此定义
moc_ChangeUI.o:(.bss+0x4): `bufferFull'被多次定义




QT刚刚开始接触,原谅我没学C++就开始弄QT,时间比较紧,请大神们帮我顺下思路,现在真的不知道改怎么办了


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2018-3-26 09:21:13 显示全部楼层
不是说了 变量重定义嘛? 找找这个变量的定义啥的吧~
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-3-26 22:37:00 显示全部楼层
不要在头文件中定义对象。
回复

使用道具 举报

尚未签到

2018-6-6 21:11:05 显示全部楼层
哈哈,大一的吧。努力
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了