QT,updateGL()减慢用户界面交互

QT,updateGL()减慢用户界面交互,qt,qt4,qt5,Qt,Qt4,Qt5,我开发了一个程序,它从套接字读取位图原始数据,并向glWidget对象发送信号。该对象会将位图渲染到屏幕上。我遇到的问题是程序会减慢ui交互。以下是在主窗口内启动的QUdpSocket类: while(sum > 0) { QByteArray datagram; if(udpsocket->pendingDatagramSize() == -1){ usleep(1000);

我开发了一个程序,它从套接字读取位图原始数据,并向glWidget对象发送信号。该对象会将位图渲染到屏幕上。我遇到的问题是程序会减慢ui交互。以下是在主窗口内启动的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);
        }

当我测试程序时,从套接字读取不会减慢ui交互。它所做的是在updateGl()函数之后处理数据以呈现到屏幕上。有什么方法可以让我的ui交互更快吗?

你能澄清一下“ui交互”是什么意思吗?ui中有一些按钮,单击该按钮可以处理串行设备。然而,另一方面,glWidget通过glDrawPixels显示图像或渲染。建议确保所有非UI数据处理在单独的线程上进行。您不想干扰按钮的点击,因为您正在计算新的图像缓冲区。您可以随时计算并将结果返回UI线程。我知道,但我需要渲染到屏幕,是否可以在线程内定义glwidget对象,并将套接字(读取数据时)的信号连接到线程,以便它能够处理处理?这样,线程的run()方法保持为空(不使用该部分)。我知道,但我需要渲染到屏幕上,是否可以在线程内定义glwidget对象,并将套接字(读取数据时)的信号连接到线程,以便它能够处理处理?这样,线程的run()方法保持为空(不使用该部分)。
void GlWidget::createTextureFromBitmap(QByteArray btmp)
{
    bytes.clear();
    bytes.resize(size * 3 * sizeof(unsigned char));

    bytes = btmp;
    updateGL();
    qDebug() << "updated..";
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());