我开发了一个从socket读取位图原始数据的程序,它将它发送给glWidget对象。该对象将位图呈现给屏幕。我遇到的问题是程序减慢了ui的交互。这是在MainWindow中启动的QUdpSocket类:
while(sum > 0)
{
QByteArray datagram;
if(udpsocket->pendingDatagramSize() == -1){
usleep(1000);
continue;
}
datagram.resize(udpsocket->pendingDatagramSize());
//qDebug() << "udp:" << udpsocket->pendingDatagramSize();
udpsocket->readDatagram(datagram.data(), datagram.size(), host, &myPort);
sumPacket.append(datagram);
sum -= datagram.size();
qDebug() << loop;
loop++;
}
if(sum == 0){
emit dataReceivedClientImage(sumPacket);
}
当我收到一个数据包时,会向GlWidget类发出信号,将其呈现在屏幕上,如下所示:
void GlWidget::createTextureFromBitmap(QByteArray btmp)
{
bytes.clear();
bytes.resize(size * 3 * sizeof(unsigned char));
bytes = btmp;
updateGL();
qDebug() << "updated..";
最后glPaint()会这样做:
void GlWidget::paintGL()
{
//! [5]
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glDrawPixels(window_width,window_height,GL_RGB,GL_UNSIGNED_BYTE,bytes.constData());
当我测试程序时,从套接字读取不会减慢ui交互。它的作用是在updateGl()函数之后处理数据以呈现到屏幕。有什么方法可以让我的ui互动更快?