Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. qopenglwidget doesn't fire
QtWS25 Last Chance

qopenglwidget doesn't fire

Scheduled Pinned Locked Moved Solved General and Desktop
qt5.11qopenglwidget
10 Posts 3 Posters 923 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    timob256
    wrote on 29 Nov 2021, 14:37 last edited by timob256
    #1

    can't start qopenglwidget. I tried to call but for some reason the error jumps out.
    i have qt 5.11 i can't use qt 3D and Quick 3D

    here is the code

    dialogokno.h

    #ifndef DIALOGOKNO_H
    #define DIALOGOKNO_H
    
    #include <QMainWindow>
    #include <QFile>
    #include <QPushButton>
    #include <QLabel>
    #include <QSize>
    
    #include <QApplication>
    #include <QDesktopWidget>
    #include <QRect>
    #include <QDebug>
    #include <QLineEdit>
    #include <QGridLayout>
    #include <QSpacerItem>
    #include <QObject>
    #include "qopenglwidget.h"
    
    
    class DialogOkno : public QWidget
    {
        Q_OBJECT
    
    public:
        DialogOkno(QWidget *parent = 0);
        ~DialogOkno();
    
    protected:
        QFile* file;         // загрузить файл
        QGridLayout* gl_layaout[4];
        QPushButton* b_load; // кнопка для выбора и загрузки файла
        QLabel* l_label[3];
        QLineEdit* le_edit[7];
        QSpacerItem* si_spacer[4];
        QOpenGLWidget *openGLWidget;
    
        //опен гл
        void initializeGL();
        void paintGL();
        void resizeGL(int width, int height);
    };
    
    #endif // DIALOGOKNO_H
    

    dialogokno.cpp

    #include "dialogokno.h"
    
    DialogOkno::DialogOkno(QWidget *parent)
        : QWidget(parent)
    {
        // обявл элементы
        gl_layaout[0] = new QGridLayout(parent);
        gl_layaout[1] = new QGridLayout(parent);
        gl_layaout[2] = new QGridLayout(parent);
    
        gl_layaout[3] = new QGridLayout(parent);
    
        openGLWidget = new QOpenGLWidget(parent);
    
        l_label[0] = new QLabel(parent);
        l_label[1] = new QLabel(parent);
        l_label[2] = new QLabel(parent);
    
        le_edit[0] = new QLineEdit(parent);
        le_edit[1] = new QLineEdit(parent);
        le_edit[2] = new QLineEdit(parent);
        le_edit[3] = new QLineEdit(parent);
        le_edit[4] = new QLineEdit(parent);
        le_edit[5] = new QLineEdit(parent);
        le_edit[6] = new QLineEdit(parent);
    
        // настройки элеметов (стилизация)
    
        // заполнение элементов
        l_label[0]->setText("hla_global");
        l_label[1]->setText("hla_local");
        l_label[2]->setText("logger");
    
        le_edit[0]->setText("server_ip_global");
        le_edit[1]->setText("server_port_global");
    
        le_edit[2]->setText("server_port_local");
        le_edit[3]->setText("server_port_local");
    
        le_edit[4]->setText("log");
        le_edit[5]->setText("log_period_ms");
        le_edit[6]->setText("log_size_in_mb");
    
        //разложение элементов по группам
    
        gl_layaout[0]->addWidget(l_label[0], 0, 0, 1, 1);
        gl_layaout[0]->addWidget(le_edit[0], 1, 0, 1, 1);
        gl_layaout[0]->addWidget(le_edit[1], 2, 0, 1, 1);
    
        gl_layaout[1]->addWidget(l_label[1], 0, 0, 1, 1);
        gl_layaout[1]->addWidget(le_edit[2], 1, 0, 1, 1);
        gl_layaout[1]->addWidget(le_edit[3], 2, 0, 1, 1);
    
        gl_layaout[2]->addWidget(l_label[2], 0, 0, 1, 1);
        gl_layaout[2]->addWidget(le_edit[4], 1, 0, 1, 1);
        gl_layaout[2]->addWidget(le_edit[5], 2, 0, 1, 1);
        gl_layaout[2]->addWidget(le_edit[6], 3, 0, 1, 1);
    
    
        gl_layaout[3]->addLayout(gl_layaout[0], 0, 0, 1, 1);
    
        si_spacer[0] = new QSpacerItem(120, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
        gl_layaout[3]->addItem(si_spacer[0], 0, 1, 1, 1);
    
        gl_layaout[3]->addLayout(gl_layaout[1], 0, 2, 1, 1);
        si_spacer[1] = new QSpacerItem(120, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
        gl_layaout[3]->addItem(si_spacer[1], 0, 3, 1, 1);
        si_spacer[2] = new QSpacerItem(20, 82, QSizePolicy::Minimum, QSizePolicy::Expanding);
        gl_layaout[3]->addItem(si_spacer[2],1, 0, 1, 1);
        gl_layaout[3]->addLayout(gl_layaout[2], 2, 0, 1, 1);
        si_spacer[3] = new QSpacerItem(20, 82, QSizePolicy::Minimum, QSizePolicy::Expanding);
        gl_layaout[3]->addItem(si_spacer[3],3,0);
        gl_layaout[3]->addWidget(openGLWidget, 1, 1, 3, 3);
    
        this->setLayout(gl_layaout[3]);
    }
    
    DialogOkno::~DialogOkno()
    {
    
    }
    
    void QOpenGLWidget::initializeGL()
    {
        glClearColor(1.0, 1.0, 1.0, 0.0);
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    }
    
    void QOpenGLWidget::paintGL()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glColor3f(0.0, 0.0, 0.0);
        glBegin(GL_QUADS);
        glVertex3f (0.51, 0.51, 0.51);
        glVertex3f (-0.51, 0.51, 0.51);
        glVertex3f (-0.51, -0.51, 0.51);
        glVertex3f (0.51, -0.51, 0.51);
        glEnd();
    
     }
    
    void QOpenGLWidget::resizeGL(int width, int height)
    {
        glViewport(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glMatrixMode(GL_MODELVIEW);
    }
    

    main.cpp

    #include "dialogokno.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        DialogOkno w;
    
        QDesktopWidget desktop;
        QRect rect = desktop.availableGeometry(desktop.primaryScreen()); // прямоугольник с размерами экрана
        QPoint center = rect.center(); //координаты центра экрана
     
        qDebug() << "rect.x()/2 " <<rect.y()/2  << "rect.y()/2" << rect.y()/2;
        qDebug() << "center.x()/2 " <<center.y()  << "center.y()/2" << center.y();
    
        w.resize(center.x(), center.y());
        w.setWindowTitle("программа");
        w.show();
    
        return a.exec();
    }
    

    dialog_okno_qmake.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2021-11-24T16:28:03
    #
    #-------------------------------------------------
    
    QT       += core gui opengl
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = dialog_okno_qmake
    TEMPLATE = app
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    
    SOURCES += \
            main.cpp \
            dialogokno.cpp
    
    HEADERS += \
            dialogokno.h
    
    
    INCLUDEPATH += $$PWD/glfw_bin/include/GLFW/ \ # добавляем для удобства чтоб напрямую писать
                   $$PWD/glew_bin/include/GL/  \  # только название заголовчного файла без полного пути
                   $$PWD/stb_image/
    
    HEADERS += \
        glfw_bin/include/GLFW/glfw3.h \
        glfw_bin/include/GLFW/glfw3native.h \
        glew_bin/include/GL/glew.h \
    
    # --- linux ---
    
    unix:!macx: LIBS += -L$$PWD/../../../../usr/lib/x86_64-linux-gnu/ -lOpenGL
    
    INCLUDEPATH += $$PWD/../../../../usr/include/GL
    DEPENDPATH += $$PWD/../../../../usr/include/GL
    
    unix:!macx: LIBS += -L$$PWD/../../../../usr/lib/x86_64-linux-gnu/ -lGLEW
    
    INCLUDEPATH += $$PWD/../../../../usr/include/GL
    DEPENDPATH += $$PWD/../../../../usr/include/GL
    
    unix:!macx: LIBS += -L$$PWD/../../../../usr/lib/x86_64-linux-gnu/ -lglut
    
    INCLUDEPATH += $$PWD/../../../../usr/include/GL
    DEPENDPATH += $$PWD/../../../../usr/include/GL
    
    unix:!macx: LIBS += -L$$PWD/../../../../usr/lib/x86_64-linux-gnu/ -lGLU
    
    INCLUDEPATH += $$PWD/../../../../usr/include/GL
    DEPENDPATH += $$PWD/../../../../usr/include/GL
    

    Screenshot_20211129_165752.png

    output :

    Запускается /home/dima/dima_project/dialog_okno_qmake/dialog_okno_qmake...
    rect.x()/2  0 rect.y()/2 0
    center.x()/2  515 center.y()/2 515
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    QOpenGLContext::makeCurrent() called with non-opengl surface 0x59b7a92e99a0
    composeAndFlush: makeCurrent() failed
    /home/dima/dima_project/dialog_okno_qmake/dialog_okno_qmake завершился с кодом 0
    
    1 Reply Last reply
    0
    • T Offline
      T Offline
      timob256
      wrote on 30 Nov 2021, 13:06 last edited by
      #6

      #include "dialogokno.h"
      #include <QApplication>

      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
          QApplication::setAttribute(Qt::AA_ForceRasterWidgets, false);
          DialogOkno w;
      
          QDesktopWidget desktop;
          QRect rect = desktop.availableGeometry(desktop.primaryScreen()); // прямоугольник с размерами экрана
          QPoint center = rect.center(); //координаты центра экрана
      
          qDebug() << "rect.x()/2 " <<rect.y()/2  << "rect.y()/2" << rect.y()/2;
          qDebug() << "center.x()/2 " <<center.y()  << "center.y()/2" << center.y();
      
          w.resize(center.x(), center.y());
          w.setWindowTitle("программа");
          w.show();
      
          return a.exec();
      }
      
      [ 
      

      QApplication::setAttribute(Qt::AA_ForceRasterWidgets, false);
      ](link https://wiki.astralinux.ru/pages/viewpage.action?pageId=43614493)

      Screenshot_20211130_160433.png

      1 Reply Last reply
      0
      • C Online
        C Online
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on 29 Nov 2021, 15:18 last edited by
        #2

        Your code does not even compile

        For example this will not work

        void QOpenGLWidget::paintGL()

        Fix your code first and remove all non-needed stuff.

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        T 1 Reply Last reply 30 Nov 2021, 10:05
        0
        • M Offline
          M Offline
          mchinand
          wrote on 29 Nov 2021, 15:29 last edited by
          #3

          Besides fixing your code, you might also have set the default surface format in main.cpp. See the examples, for instance the 2D paint OpenGL example.

          T 1 Reply Last reply 30 Nov 2021, 10:21
          0
          • C Christian Ehrlicher
            29 Nov 2021, 15:18

            Your code does not even compile

            For example this will not work

            void QOpenGLWidget::paintGL()

            Fix your code first and remove all non-needed stuff.

            T Offline
            T Offline
            timob256
            wrote on 30 Nov 2021, 10:05 last edited by
            #4

            @Christian-Ehrlicher how ??

            C 1 Reply Last reply 30 Nov 2021, 16:54
            0
            • M mchinand
              29 Nov 2021, 15:29

              Besides fixing your code, you might also have set the default surface format in main.cpp. See the examples, for instance the 2D paint OpenGL example.

              T Offline
              T Offline
              timob256
              wrote on 30 Nov 2021, 10:21 last edited by
              #5

              @mchinand I tried

              rect.x()/2  0 rect.y()/2 0
              center.x()/2  515 center.y()/2 515
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              QOpenGLContext::makeCurrent() called with non-opengl surface 0x691e4a3d5ce0
              composeAndFlush: makeCurrent() failed
              

              Screenshot_20211130_132117.png

              1 Reply Last reply
              0
              • T Offline
                T Offline
                timob256
                wrote on 30 Nov 2021, 13:06 last edited by
                #6

                #include "dialogokno.h"
                #include <QApplication>

                int main(int argc, char *argv[])
                {
                    QApplication a(argc, argv);
                    QApplication::setAttribute(Qt::AA_ForceRasterWidgets, false);
                    DialogOkno w;
                
                    QDesktopWidget desktop;
                    QRect rect = desktop.availableGeometry(desktop.primaryScreen()); // прямоугольник с размерами экрана
                    QPoint center = rect.center(); //координаты центра экрана
                
                    qDebug() << "rect.x()/2 " <<rect.y()/2  << "rect.y()/2" << rect.y()/2;
                    qDebug() << "center.x()/2 " <<center.y()  << "center.y()/2" << center.y();
                
                    w.resize(center.x(), center.y());
                    w.setWindowTitle("программа");
                    w.show();
                
                    return a.exec();
                }
                
                [ 
                

                QApplication::setAttribute(Qt::AA_ForceRasterWidgets, false);
                ](link https://wiki.astralinux.ru/pages/viewpage.action?pageId=43614493)

                Screenshot_20211130_160433.png

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mchinand
                  wrote on 30 Nov 2021, 13:39 last edited by
                  #7

                  Here's the main in the example project I linked to above. As I said above, add the surface format lines to your main.

                  #include "window.h"
                  
                  #include <QApplication>
                  #include <QSurfaceFormat>
                  
                  int main(int argc, char *argv[])
                  {
                      QApplication app(argc, argv);
                  
                      QSurfaceFormat fmt;
                      fmt.setSamples(4);
                      QSurfaceFormat::setDefaultFormat(fmt);
                  
                      Window window;
                      window.show();
                      return app.exec();
                  }
                  
                  1 Reply Last reply
                  0
                  • T timob256
                    30 Nov 2021, 10:05

                    @Christian-Ehrlicher how ??

                    C Online
                    C Online
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on 30 Nov 2021, 16:54 last edited by
                    #8

                    @timob256 said in qopenglwidget doesn't fire:

                    @Christian-Ehrlicher how ??

                    You wrote the code, so you should be able to post a valid, compilable example - your code you posted above for sure does not compile at all...

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    1 Reply Last reply
                    0
                    • T Offline
                      T Offline
                      timob256
                      wrote on 1 Dec 2021, 08:59 last edited by timob256 12 Jan 2021, 08:59
                      #9

                      @Christian-Ehrlicher said in qopenglwidget doesn't fire:

                      You wrote the code, so you should be able to post a valid, compilable example - your code you posted above for sure does not compile at all...

                      #ifndef MYGLWIDGET_H
                      #define MYGLWIDGET_H
                      
                      #include <QOpenGLWidget>
                      #include <QDebug>
                      //#include <freeglut.h>
                      
                      #include <iostream>
                      #include <sstream>
                      #include <string>
                      #include <fstream>
                      #include <vector>
                      
                      
                      
                      class MyGLWidget : public QOpenGLWidget
                      {
                          Q_OBJECT
                      public:
                          MyGLWidget(QWidget* parent = nullptr);
                      
                          // Globals.
                           std::vector<float> verticesVector; // Vector to read in vertex x, y and z values fromt the OBJ file.
                           std::vector<int> facesVector; // Vector to read in face vertex indices from the OBJ file.
                           float *vertices = NULL;  // Vertex array of the object x, y, z values.
                          int *faces = NULL; // Face (triangle) vertex indices.
                           int numIndices; // Number of face vertex indices.
                           float Xangle = 0.0, Yangle = 0.0, Zangle = 0.0; // Angles to rotate the object.
                      
                          void loadOBJ(std::string fileName);
                      
                      
                      protected:
                          void initializeGL();
                          void resizeGL(int w, int h);
                          void paintGL();
                      };
                      
                      #endif // MYGLWIDGET_H
                      
                      
                      #include "myglwidget.h"
                      
                      
                      
                      MyGLWidget::MyGLWidget(QWidget * parent): QOpenGLWidget(parent)
                      {
                      
                      }
                      
                      
                      void MyGLWidget::initializeGL()
                      {
                          glEnableClientState(GL_VERTEX_ARRAY);
                      
                          glClearColor(1.0, 1.0, 1.0, 0.0);
                      }
                      
                      void MyGLWidget::resizeGL(int w, int h)
                      {
                      //    glViewport(0, 0, w, h);
                      //    glMatrixMode(GL_PROJECTION);
                      //    glLoadIdentity();
                      //    glFrustum(-5.0, 5.0, -5.0, 5.0, 5.0, 100.0);
                      //    glMatrixMode(GL_MODELVIEW);
                      
                          glViewport(0, 0, w, h);
                          glMatrixMode(GL_PROJECTION);
                          glLoadIdentity();
                          glMatrixMode(GL_MODELVIEW);
                      }
                      
                      void MyGLWidget::paintGL()
                      {
                          glClearColor(1.0, 1.0, 0.0, 0.0);
                      
                          // Read the external OBJ file into the internal vertex and face vectors.
                          loadOBJ("gourd.obj");
                      
                          qDebug() << "tyt1";
                          // Size the vertex array and copy into it x, y, z values from the vertex vector.
                          vertices = new float[verticesVector.size()];
                          for (int i = 0; i < verticesVector.size(); i++) vertices[i] = verticesVector[i];
                      
                          qDebug() << "tyt2";
                          // Size the faces array and copy into it face index values from the face vector.
                          faces = new int[facesVector.size()];
                          for (int i = 0; i < facesVector.size(); i++) faces[i] = facesVector[i];
                          numIndices = facesVector.size();
                      
                          glVertexPointer(3, GL_FLOAT, 0, vertices);
                      
                          qDebug() << "tyt3";
                      }
                      
                      void MyGLWidget::loadOBJ(std::string fileName)
                      {
                         std::string line;
                         int count, vertexIndex1, vertexIndex2, vertexIndex3;
                         float coordinateValue;
                         char currentCharacter, previousCharacter;
                      
                         // Open the OBJ file.
                         std::ifstream inFile(fileName.c_str(), std::ifstream::in);
                      
                         // Read successive lines.
                         while (getline(inFile, line))
                         {
                            // Line has vertex data.
                            if (line.substr(0, 2) == "v ")
                            {
                               // Initialize a string from the character after "v " to the end.
                               std::istringstream currentString(line.substr(2));
                      
                               // Read x, y and z values. The (optional) w value is not read.
                               for (count = 1; count <= 3; count++)
                               {
                                  currentString >> coordinateValue;
                                  verticesVector.push_back(coordinateValue);
                               }
                            }
                      
                            // Line has face data.
                            else if (line.substr(0, 2) == "f ")
                            {
                               // Initialize a string from the character after "f " to the end.
                               std::istringstream currentString(line.substr(2));
                      
                               // Strategy in the following to detect a vertex index within a face line is based on the
                               // fact that vertex indices are exactly those that follow a white space. Texture and
                               // normal indices are ignored.
                               // Moreover, from the third vertex of a face on output one triangle per vertex, that
                               // being the next triangle in a fan triangulation of the face about the first vertex.
                               previousCharacter = ' ';
                               count = 0;
                               while (currentString.get(currentCharacter))
                               {
                                  // Stop processing line at comment.
                                  if ((previousCharacter == '#') || (currentCharacter == '#')) break;
                      
                                  // Current character is the start of a vertex index.
                                  if ((previousCharacter == ' ') && (currentCharacter != ' '))
                                  {
                                     // Move the string cursor back to just before the vertex index.
                                     currentString.unget();
                      
                                     // Read the first vertex index, decrement it so that the index range is from 0, increment vertex counter.
                                     if (count == 0)
                                     {
                                        currentString >> vertexIndex1;
                                        vertexIndex1--;
                                        count++;
                                     }
                      
                                     // Read the second vertex index, decrement it, increment vertex counter.
                                     else if (count == 1)
                                     {
                                        currentString >> vertexIndex2;
                                        vertexIndex2--;
                                        count++;
                                     }
                      
                                     // Read the third vertex index, decrement it, increment vertex counter AND output the first triangle.
                                     else if (count == 2)
                                     {
                                        currentString >> vertexIndex3;
                                        vertexIndex3--;
                                        count++;
                                        facesVector.push_back(vertexIndex1);
                                        facesVector.push_back(vertexIndex2);
                                        facesVector.push_back(vertexIndex3);
                                     }
                      
                                     // From the fourth vertex and on output the next triangle of the fan.
                                     else
                                     {
                                        vertexIndex2 = vertexIndex3;
                                        currentString >> vertexIndex3;
                                        vertexIndex3--;
                                        facesVector.push_back(vertexIndex1);
                                        facesVector.push_back(vertexIndex2);
                                        facesVector.push_back(vertexIndex3);
                                     }
                      
                                     // Begin the process of detecting the next vertex index just after the vertex index just read.
                                     currentString.get(previousCharacter);
                                  }
                      
                                  // Current character is not the start of a vertex index. Move ahead one character.
                                  else previousCharacter = currentCharacter;
                               }
                            }
                      
                            // Nothing other than vertex and face data is processed.
                            else
                            {
                            }
                         }
                      
                         // Close the OBJ file.
                         inFile.close();
                      
                         qDebug() << "tyt0";
                      }
                      
                      
                      #ifndef DIALOGOKNO_H
                      #define DIALOGOKNO_H
                      
                      #include <QMainWindow>
                      #include <QFile>
                      #include <QPushButton>
                      #include <QLabel>
                      #include <QSize>
                      
                      #include <QApplication>
                      #include <QDesktopWidget>
                      #include <QRect>
                      #include <QDebug>
                      #include <QLineEdit>
                      #include <QGridLayout>
                      #include <QSpacerItem>
                      #include <QObject>
                      #include <QOpenGLWidget>
                      
                      #include "myglwidget.h"
                      
                      //#include "helper.h"
                      //#include "glwidget.h"
                      
                      
                      
                      
                      class DialogOkno : public QWidget
                      {
                          Q_OBJECT
                      
                      public:
                          DialogOkno(QWidget *parent = 0);
                          ~DialogOkno();
                      
                      
                      
                      protected:
                      //    QWidget* centralWidget;
                      
                          QFile* file;         // загрузить файл
                          QGridLayout* gl_layaout[4];
                          QPushButton* b_load; // кнопка для выбора и загрузки файла
                          QLabel* l_label[3];
                          QLineEdit* le_edit[7];
                          QSpacerItem* si_spacer[4];
                      };
                      
                      #endif // DIALOGOKNO_H
                      
                      
                      #include "dialogokno.h"
                      
                      DialogOkno::DialogOkno(QWidget *parent)
                          : QWidget(parent)
                      {
                      //    QLabel *openGLLabel = new QLabel(tr("OpenGL"));
                      //    GLWidget *openGL = new GLWidget(&helper, this);
                      
                          MyGLWidget * openGL = new MyGLWidget(parent);
                      
                          // обявл элементы
                          gl_layaout[0] = new QGridLayout(parent);
                          gl_layaout[1] = new QGridLayout(parent);
                          gl_layaout[2] = new QGridLayout(parent);
                      
                          gl_layaout[3] = new QGridLayout(parent);
                      
                          openGLWidget = new QOpenGLWidget(parent);
                      
                          l_label[0] = new QLabel(parent);
                          l_label[1] = new QLabel(parent);
                          l_label[2] = new QLabel(parent);
                      
                          le_edit[0] = new QLineEdit(parent);
                          le_edit[1] = new QLineEdit(parent);
                          le_edit[2] = new QLineEdit(parent);
                          le_edit[3] = new QLineEdit(parent);
                          le_edit[4] = new QLineEdit(parent);
                          le_edit[5] = new QLineEdit(parent);
                          le_edit[6] = new QLineEdit(parent);
                      
                          // настройки элеметов (стилизация)
                      
                          // заполнение элементов
                          l_label[0]->setText("hla_global");
                          l_label[1]->setText("hla_local");
                          l_label[2]->setText("logger");
                      
                          le_edit[0]->setText("server_ip_global");
                          le_edit[1]->setText("server_port_global");
                      
                          le_edit[2]->setText("server_port_local");
                          le_edit[3]->setText("server_port_local");
                      
                          le_edit[4]->setText("log");
                          le_edit[5]->setText("log_period_ms");
                          le_edit[6]->setText("log_size_in_mb");
                      
                          //разложение элементов по группам
                      
                          gl_layaout[0]->addWidget(l_label[0], 0, 0, 1, 1);
                          gl_layaout[0]->addWidget(le_edit[0], 1, 0, 1, 1);
                          gl_layaout[0]->addWidget(le_edit[1], 2, 0, 1, 1);
                      
                          gl_layaout[1]->addWidget(l_label[1], 0, 0, 1, 1);
                          gl_layaout[1]->addWidget(le_edit[2], 1, 0, 1, 1);
                          gl_layaout[1]->addWidget(le_edit[3], 2, 0, 1, 1);
                      
                          gl_layaout[2]->addWidget(l_label[2], 0, 0, 1, 1);
                          gl_layaout[2]->addWidget(le_edit[4], 1, 0, 1, 1);
                          gl_layaout[2]->addWidget(le_edit[5], 2, 0, 1, 1);
                          gl_layaout[2]->addWidget(le_edit[6], 3, 0, 1, 1);
                      
                      
                          gl_layaout[3]->addLayout(gl_layaout[0], 0, 0, 1, 1);
                      
                          si_spacer[0] = new QSpacerItem(120, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
                      //    gl_layaout[3]->addWidget(si_spacer[0], 0, 1, 1, 1);
                          gl_layaout[3]->addItem(si_spacer[0], 0, 1, 1, 1);
                      
                          gl_layaout[3]->addLayout(gl_layaout[1], 0, 2, 1, 1);
                          si_spacer[1] = new QSpacerItem(120, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
                       //    gl_layaout[3]->addWidget(si_spacer[1], 0,3, 1, 1);
                          gl_layaout[3]->addItem(si_spacer[1], 0, 3, 1, 1);
                          si_spacer[2] = new QSpacerItem(20, 82, QSizePolicy::Minimum, QSizePolicy::Expanding);
                      //    gl_layaout[3]->addWidget(si_spacer[2], 1,0, 1, 1);
                          gl_layaout[3]->addItem(si_spacer[2],1, 0, 1, 1);
                          gl_layaout[3]->addLayout(gl_layaout[2], 2, 0, 1, 1);
                          si_spacer[3] = new QSpacerItem(20, 82, QSizePolicy::Minimum, QSizePolicy::Expanding);
                      //    gl_layaout[3]->addWidget(si_spacer[3], 3,0, 1, 1);
                          gl_layaout[3]->addItem(si_spacer[3], 3, 0, 1, 1);
                      //    gl_layaout[3]->addWidget(openGLWidget, 1, 1, 3, 3);
                          gl_layaout[3]->addWidget(openGL , 1, 1, 3, 3);
                      
                      //     gl_layaout[3]->addLayout(gl_layaout[0], 0,0);
                      //     gl_layaout[3]->addLayout(gl_layaout[1], 1,0);
                      //     gl_layaout[3]->addLayout(gl_layaout[2], 2,0);
                      
                      
                          this->setLayout(gl_layaout[3]);
                      }
                      
                      DialogOkno::~DialogOkno()
                      {
                      
                      }
                      

                      Screenshot_20211201_115914.png

                      1 Reply Last reply
                      0
                      • C Online
                        C Online
                        Christian Ehrlicher
                        Lifetime Qt Champion
                        wrote on 1 Dec 2021, 09:15 last edited by
                        #10

                        And this example still has the errors? Then simplify it (and fix the memleaks - a new[] needs a delete[] and paintGL() is not called only once so your vectors grow indefinitly) until we can really try it out. E.g. loading an object file is not needed - drawing a simple rectangle to reproduce the issue is enough.

                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                        Visit the Qt Academy at https://academy.qt.io/catalog

                        1 Reply Last reply
                        1

                        9/10

                        1 Dec 2021, 08:59

                        • Login

                        • Login or register to search.
                        9 out of 10
                        • First post
                          9/10
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved