在模型方法rowCount()
和columnCount()
中,我尝试使用QTcpSocket
从服务器检索数据时,模型会调用这些方法几次,但之后不会调用data()
。关联的QTableView
不显示任何内容。我检查了调试器,它显示rowCount()
和columnCount()
正在返回有效数据。
该模型源自QAbstractTableModel
。这是TcpTableModel::rowCount()
的代码:
//Setup waiting for server response
QTimer timer;
timer.setSingleShot(true);
QEventLoop eventLoop;
connect(&m_tcpSocket, &QTcpSocket::readyRead, &eventLoop, &QEventLoop::quit);
connect(&timer, &QTimer::timeout, &eventLoop, &QEventLoop::quit);
timer.start(TIMEOUT);
//Using QDataStream to send and receive model information
QDataStream dataStream(&m_tcpSocket);
dataStream << MSG_REQUEST_ROWS_COUNT;//Sending request for number of rows
eventLoop.exec();
//If no response received
if(!timer.isActive())
{
connect(&m_tcpSocket, &QTcpSocket::readyRead, this, &TcpTableModel::readyRead);
return 0;
}
timer.stop();
//Receiving information from server
dataStream.startTransaction();
int msgType = -1;
int rowCount = -1;
dataStream >> msgType;
dataStream >> rowCount;
if((msgType != MSG_REQUEST_ROWS_COUNT) || (rowCount == -1))
{
dataStream.commitTransaction();
return 0;
}
dataStream.commitTransaction();
return rowCount;
服务器使用相同的方法处理请求。它接收MSG_REQUEST_ROWS_COUNT
然后发送回MSG_REQUEST_ROWS_COUNT
和一个包含行数的int。
在我的计划中,这种行为的来源可能是什么?如果对模型的请求满足延迟,QTableView
可能无法正常工作。或者我应该使用完全不同的方法从服务器获取模型数据?