qt没法在 QThread::run() 或者QObject::moveToThread 里面创建ui吗? (不是操作MainWindow)
1.功能是接收到别人发来的tcp消息,需要处理信息后弹出其它界面(自定义的Widget ,Dialog,并非原来的MainWindow).
2.原本想用main函数里面创建MainWindow前, 创建一个继承了QThread的对象, 然后Start()执行 QThread::run() 处理消息后弹框, 等待用户点击按钮后销毁线程和窗口. 实际发现弹出窗口就已经卡死动不了....
3. 然后是在Tcp接收消息的函数里面用QObject::moveToThread 弹出窗口后不久就崩溃了...
4.解决方法我知道可以用QObject::moveToThread 处理消息数据, 处理结束后通过信号槽返回主界面创建自定义窗口. 但是这样消息类型越多. 我要在MainWindow里面至少为每个类型写两个信号槽.导致这个文件异常臃肿. 而且跟处理消息这个功能耦合很大.. 所以又没有方法能在线程里面使用ui ?
5.另外在 MainWindow类里面放了一个 A a对象 和一个QThread Mythread对象, 收到Tcp消息后进行 a.moveToThread(&Mythread); Mythread.start();发送signal emit(ToThreadMission); 在Slot ThreadMisson()里面打印线程id 发现多次接收tcp消息后重复执行上面的moveToThread和Start() 实际上也只有一条线程而已. 问题我想随意甚至同时创建线程,用完后销毁, 而这个方法一个线程需要事先在类里面放一个对象明显不合适阿...
6.如果把 A a和 QThread Mythread 放到接收Tcp消息的函数里面. 这样直接报 QThread: Destroyed while thread is still running, 估计是函数结束后东西都清了...所以线程非法结束了吧....
所以到底有什么方法很好解决了 tcp收到消息后, 把内容移到别的线程里面处理并且可以创建自定义的界面?!(因为需要创建的线程数和时机是未知的, 可能需要短时间内创建多条线程处理消息)