Ok, that clarified some things. I'm still having a little issue. My classes look as follows:

Qt Code:
  1. class InventoryThread : public QObject
  2. {
  3. Q_OBJECT
  4.  
  5. private:
  6. int handle;
  7. QListWidget * list;
  8. RFID_18K6C_INVENTORY_PARMS * inventoryParms;
  9. RFID_18K6C_INVENTORY_PARMS * SetInventoryParams(const RFID_RADIO_HANDLE handle, const int cycles);
  10. QTimer * timer;
  11.  
  12. public:
  13. explicit InventoryThread(QObject *parent = 0, int h = 0, QListWidget *lst = 0);
  14.  
  15. signals:
  16.  
  17. public slots:
  18. void DoInventory();
  19. };
  20.  
  21. InventoryThread::InventoryThread(QObject *parent, int h, QListWidget * lst) : QObject(parent)
  22. {
  23. handle = h;
  24. list = lst;
  25. timer = new QTimer(this);
  26. list->connect(timer,SIGNAL(timeout()),SLOT(clear()));
  27. //connect(timer,SIGNAL(timeout()),list,SLOT(clear()));
  28. timer->setSingleShot(false);
  29. timer->start(1500);
  30. }
  31.  
  32. void InventoryThread::DoInventory()
  33. {
  34. printf("Doing inventory\n");
  35. RFID_18K6C_INVENTORY_PARMS * parms = SetInventoryParams(handle, 5);
  36. printf("Tag Inventory returned %d\n", RFID_18K6CTagInventory(handle, parms, 0));
  37. free(parms);
  38. }
To copy to clipboard, switch view to plain text mode 
In my main class I have
Qt Code:
  1. class QThreadEx : public QThread
  2. {
  3. protected:
  4. void run() { exec(); }
  5. };
  6.  
  7. MainWindow::MainWindow(QWidget *parent) :
  8. QMainWindow(parent),
  9. ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. QObject::connect(this->ui->start,SIGNAL(clicked()),this,SLOT(StartInventory()));
  13. invThread = new InventoryThread(0, handle, this->ui->listWidget);
  14. thr = new QThreadEx();
  15. invThread->moveToThread(thr);
  16. invThread->connect(thr,SIGNAL(started()),SLOT(DoInventory()));
  17. }
To copy to clipboard, switch view to plain text mode 

Finally, when I click on my start button I call thr->start() and when I click on the end button I call thr->quit(). This scheme works only for the first time. If I click on the start button again the thread will not launch (I can't see the printf's output on my terminal). Obviously I'm still missing something. How can I launch again my thread after quitting it (or after DoInventory() slot ended its work)?