title: Error "QObject::startTimer: QTimer can only be used with threads started with QThread" many times when closing application
body: <p>I know this has been asked many times before. I read all of those threads, and my case seems different. Everybody else who has this trouble has a few straightforward causes that I think I’ve ruled out, such as:</p>
  
  <ul>
  <li>Starting a timer with no event loop running </li>
  <li>Starting/stopping a timer from a thread other than the one that created the timer</li>
  <li>Failing to set the parent property of a widget, leading to problems with the order of destruction</li>
  </ul>
  
  <p>Below I have a minimal code sample that demonstrates the problem. Notice that I’ve started no threads or timers. I also have set the parent of every widget. If I remove the graph widgets, the problem goes away, so one is tempted to blame pyQtGraph, however, if I include the plot widgets but exclude all the blank tabs (i.e. every tab except tabCatchaTiger), the problem also goes away, and that seems to vindicate pyQtGraph.</p>
  
  <p>Versions:</p>
  
  <ul>
  <li>Windows 7 </li>
  <li>Python 2.7.8 </li>
  <li>Wing IDE 5.0.9-1 </li>
  <li>PyQt 4.11.1 </li>
  <li>PyQwt 5.2.1</li>
  <li>PyQtGraph 0.9.8</li>
  </ul>
  
  <p>Test case:</p>
  
  <pre><code>from PyQt4 import Qt, QtGui, QtCore
  import PyQt4.Qwt5 as Qwt
  import pyqtgraph as pg
  
  pg.functions.USE_WEAVE = False # Lets pyqtgraph plot without gcc
  
  pg.setConfigOption('background', 'w')
  pg.setConfigOption('foreground', 'k')
  
  # GUI for visualizing data from database
  class crashyGUI(QtGui.QWidget) :
  
      def __init__(self) :
          # Make the window
          QtGui.QWidget.__init__(self)
          self.resize(700, QtGui.QDesktopWidget().screenGeometry(self).height()*.85)
          self.setWindowTitle('Data Visualization')
  
          # Create tab interface
          tabWidget = QtGui.QTabWidget(self)
  
          # define the tab objects
          self.tabEeny = QtGui.QWidget(tabWidget)
          self.tabMeeny = QtGui.QWidget(tabWidget)
          self.tabMiney = QtGui.QWidget(tabWidget)
          self.tabMoe = QtGui.QWidget(tabWidget)
          self.tabCatchaTiger = QtGui.QWidget(tabWidget)
          self.tabByThe = QtGui.QWidget(tabWidget)
          self.tabToe = QtGui.QWidget(tabWidget)
  
          # Initialize the tab objects
          self.initTabCatchaTiger()
  
          ###########################################
          ############### Main Layout ###############
          ###########################################
  
          tabWidget.addTab(self.tabEeny, 'Eeny')
          tabWidget.addTab(self.tabMeeny, 'Meeny')
          tabWidget.addTab(self.tabMiney, 'Miney')
          tabWidget.addTab(self.tabMoe, 'Moe')
          tabWidget.addTab(self.tabCatchaTiger, 'Catch a Tiger')
          tabWidget.addTab(self.tabByThe, 'By The')
          tabWidget.addTab(self.tabToe, 'Toe')
  
          self.mainLayout = QtGui.QVBoxLayout(self)
          self.mainLayout.addWidget(tabWidget)
  
          self.setLayout(self.mainLayout)
  
      def initTabCatchaTiger(self):
          ###########################################
          ############# ADC Capture Tab #############
          ###########################################
          # define tab layout
          grid = QtGui.QGridLayout(self.tabCatchaTiger)
  
          # create copy of adc plot and add to row 3 of the grid
          self.catchaTigerPlot1 = pg.PlotWidget(name = 'Catch a Tiger 1', parent = self.tabCatchaTiger)
          self.catchaTigerPlot1.setTitle('Catch a Tiger 1')
          grid.addWidget(self.catchaTigerPlot1, 2, 0, 1, 8)
  
          self.catchaTigerPlot2 = pg.PlotWidget(name = 'Catch a Tiger 2', parent = self.tabCatchaTiger)
          self.catchaTigerPlot2.setTitle('Catch a Tiger 2')
          grid.addWidget(self.catchaTigerPlot2, 3, 0, 1, 8)
  
          # set layout for tab
          self.tabCatchaTiger.setLayout(grid)
  
      def closeEvent(self, event) :
              pass
  
  def main() :
      # open a QApplication and dialog() GUI
      app = QtGui.QApplication([])
  
      windowCrashy = crashyGUI()
      windowCrashy.show()
      app.exec_()
  
  main()
  </code></pre>