• 3348阅读
  • 0回复

QThread 与 MainWidget 通信 问题 [复制链接]

上一主题 下一主题
离线jadesoft
 

只看楼主 倒序阅读 楼主  发表于: 2010-02-22
设计思路:MainWidget 负责 GUI 更新,BackService 负责后台数据处理,当BackService处理完毕后发出Signal到MainWidget。
MainWIdget收到该Signal执行GUI更新操作,现在的问题是,BackService的Signal正常发出,MainWidget也能执行了Slot但是在执行Slot的时候QT Creator提示

链接代码如下:
MainWidget 构造部分(m_lpBackServicePtr 为 BackService ):
connect(m_lpBackServicePtr,SIGNAL(UpdateWniResGui(QString,QVector<QString>*,CResource*)),this,
            SLOT(OnUpdateWniResList(QString,QVector<QString>*,CResource*)),Qt::BlockingQueuedConnection);

在执行OnUpdateWniResList后发生:

  1. void    MainWindow::OnUpdateWniResList(const QString &spTrace,QVector<QString> *lpvtList,CResource *lpRes)
  2. {
  3.     QString            szTmp;
  4.     QDir            tgDirTmp;
  5.     DWORD                  dwRetVal     = 0;
  6.     CUsualParam        tgUsual        = m_tgOptionsParam.GetUsual();
  7.     if( m_qMainBrowser.document()->lineCount() == MAX_ROWS*10 )    m_qMainBrowser.clear();
  8.     m_qMainBrowser.insertPlainText(spTrace);
  9.     for(int nIndex = 0;nIndex < lpvtList->count();nIndex++)
  10.     {
  11.         tgDirTmp = lpRes->GetLocalPath();                          // 出现问题行
  12.         szTmp.sprintf("%s.jc",lpvtList->at(nIndex) );
  13.         if( (!tgDirTmp.exists(lpvtList->at(nIndex))) && (!tgDirTmp.exists(szTmp)) )
  14.         {
  15.             QTableWidgetItem *lpItem =NULL;
  16.             dwRetVal = AppendRow(lpvtList->at(nIndex),0,"Ready",tgDirTmp.currentPath());
  17.             JTransmissionItem *lpItemService = new
  18.                                                JTransmissionItem(this,m_tgOptionsParam,*lpRes,lpvtList->at(nIndex),
  19.                                                                         m_qMainTable.item(dwRetVal,1));
  20.             m_tgThreadPool.start(lpItemService);
  21.         }
  22.     }
  23. }

请问怎么解决这个问题:QT 4.6.1 OS Windows7
快速回复
限100 字节
 
上一个 下一个