QT,updateGL()减慢了ui的交互

时间:2013-11-25 11:54:16

标签: qt qt4 qt5

我开发了一个从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互动更快?

0 个答案:

没有答案