1

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

4

0 回答 0