I have not used QT, but accessing the GUI from only one thread (GUI thread) is a well-known issue in almost any GUI that I am familiar with. I used 2 solutions for this case, of which I prefer the first:
1) Your form will update the GUI (table in this case) at timer intervals. A timer is activated in GUI thread events. On these timer events, you read data from global vars and update the table. Global vars can be updated as many streams as possible. You may need to synchronize (e.g. semaphores) access to global vars.
2) In many GUIs, threads can update the GUI by passing the GUI thread to a function (or object) and request it to execute it as soon as possible in its context. The calling thread, meanwhile, blocks until the GUI performs an action. I can recall three such functions - Invoke , InvokeLater from Java and C # or wx.CallAfter from wxPython.
source share