glViewport
在paintGL()中使用,其余地方不能使用
resizeGL
不准手动调用,手动更新使用update()
paintGL
不使用信号槽,线程间使用全局变量共享内存。主线程更新子线程变量有两种,一种是在需要刷新界面时刷新完成后更新,一种是在不需要刷新界面时数据处理完成就更新。
例如:
1、在子线程类中声明变量:
class udpreceiver : public QObject{
public:
volatile bool isupdategl=false;
}
2、在子线程中利用变量控制刷新流程
void udpreceiver::process_udp()
{
QByteArray data;
while (uSocket->hasPendingDatagrams())
{
int size = uSocket->pendingDatagramSize();
data.resize(size);
uSocket->readDatagram(data.data(), data.size());
........
while (isupdategl) { ; }
emit process_update(report);
}
}
3、主线程paintGL中更新变量:
void openglwidget::paintGL() {
if ((gl_height / gl_width) <= (float)origin_height / (float)origin_width)
{
float h = 0.9*gl