当在模型方法中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
无法正常工作。或者也许我应该使用完全不同的方法从服务器获取模型数据?