|
10Qter豆
是一个实时刷新报文的界面 ,不点击情况下每次Timer回调函数里的while循环能处理以下数据各3条的样子。用的QTreeView与QStandardItemModel。 但是一点击界面,界面就卡死在while里了。
TX/RX GramText -》 这是表头
TX(682) 000000000000000000000000000000
RX(683) 000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
程序结构如下:
::OnFreshTimer()
{
远程调用数据
while(数据存在)
{
m_StringList =数据内容;
numLines = 数据行数;
int nums = m_pDataModel->rowCount();
if (nums >= POLL_MAX_ROWS)
{
for (int i = 0; i < numLines; i++)
{
if (m_pDataModel->data(m_pDataModel->index(0,1)) != NULL)
{
m_pDataModel->removeRow(0);
m_pDataModel->insertRow(nums-1);
}
m_pDataModel->setData(m_pDataModel->index(nums - 1, 1), QBrush(tmpColor), Qt::ForegroundRole);
if(rtflag == FALSE)
{
rtflag = TRUE;
m_pDataModel->setData(m_pDataModel->index(nums - 1, 0), tmpstr);
}
//else
//{
//m_pDataModel->setData(m_pDataModel->index(nums - 1, 0), " ");
// }
m_pDataModel->setData(m_pDataModel->index(nums - 1, 1), m_StringList[i]);
}
numLines = 0;
}
else
{
rtflag = TRUE;
m_pDataModel->insertRow(nums);
m_pDataModel->setData(m_pDataModel->index(nums, 0), tmpstr);
m_pDataModel->setData(m_pDataModel->index(nums, 1), m_StringList[0]);
m_pDataModel->setData(m_pDataModel->index(nums, 1), QBrush(tmpColor), Qt::ForegroundRole);
m_pDataModel->setData(m_pDataModel->index(nums, 0), QBrush(QColor(0, 0, 0)), Qt::ForegroundRole);
numLines --;
if(numLines <= 0)
{
break;
}
//for(int j=1;j<POLL_MAX_ROWS-nums;j++)
for (int j = 1; j<numLines; j++)
{
//if(numLines <= 0) break;
if (m_pDataModel->rowCount()>=POLL_MAX_ROWS)
{
m_pDataModel->removeRow(0);
m_pDataModel->insertRow(POLL_MAX_ROWS - 1);
m_pDataModel->setData(m_pDataModel->index(POLL_MAX_ROWS - 1, 1), m_StringList[j]);
m_pDataModel->setData(m_pDataModel->index(POLL_MAX_ROWS - 1, 1), QBrush(tmpColor), Qt::ForegroundRole);
}
else
{
m_pDataModel->insertRow(nums + j);
//m_pDataModel->setData(m_pDataModel->index(nums + j, 0), " ");
m_pDataModel->setData(m_pDataModel->index(nums + j, 1), m_StringList[j]);
m_pDataModel->setData(m_pDataModel->index(nums + j, 1), QBrush(tmpColor), Qt::ForegroundRole);
//m_pDataModel->setData(m_pDataModel->index(nums + j, 0), QBrush(QColor(0, 0, 0)), Qt::ForegroundRole);
}
}
}
ui->m_ListView->scrollToBottom();
ui->m_ListView->update();
}
调远程数据
}
}
就是这个最外层的while。当不点击鼠标的情况下,while大概每循环6次就能跳出来(即将远程的数据处理完毕显示于界面)。点击鼠标后,大概1秒后,这个循环就跳不出来了,是不是事件阻塞了? 有什么办法能优化么?
|
|