S
Serathin1 июля 2020 г. 16:24

Qt + OpenGL glDeleteVertexArrays

OpenGL, Qt

Использую QMainWindow, внутри QGridLayout с табвиджетом, кнопкой и комбобоксом. В табвиджете один единственный QOpenGLWidget(OpenGL 4.3 core). Хочу менять QOpenGLWidget на другой(с удалением старого) по нажатию кнопки. Меняются 2 картинки - точка в середине экрана, и просто фон красного цвета. Так вот, когда я меняю первый виджет на второй, то без использования glDeleteVertexArrays всё работает нормально, а вот при использовании функции всё окно становится просто чёрным, включая кнопку и комбобокс.

f->glGenVertexArrays(1, &vertexArrayObject);
f->glBindVertexArray(vertexArrayObject);

InitializeGL().

static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
f->glClearBufferfv(GL_COLOR, 0, red);

f->glUseProgram(program);

f->glPointSize(40.0f);
f->glDrawArrays(GL_POINTS, 0, 1);

PaintGL().

f->glDeleteVertexArrays(1, &vertexArrayObject);
f->glDeleteProgram(program);

Деструктор

if (ui->cbSwitchListing->currentText() == "Figure 2.1")
{
     QWidget *widget = ui->twShower->currentWidget();
     if (widget->objectName() != "figure_2_1")
     {
         ui->twShower->removeTab(0);
         delete widget;

         Figure_2_1 *figure_2_1 = new Figure_2_1;
         figure_2_1->setObjectName("figure_2_1");
         ui->twShower->addTab(figure_2_1, "Figure 2.1");
     }
     return;
}

Это нажатие на кнопку

До

После

При этом комбобокс и кнопка всё ещё остаются кликабельными, хоть их и не видно.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

1
Evgenii Legotckoi
  • 3 июля 2020 г. 11:35
  • Ответ был помечен как решение.

Я не уверен, поскольку с OpenGL очень мало работал. Но может быть OpenGL контекст виджета нужно переинициализовывать.

И ещё виджет стоит удалять через метод deleteLater() а не прямым вызовом оператора delete .
Это особенность работы Qt, все объекты, которые наследованы от QObject имеют метод deleteLater, который обеспечивает безопасное удаление объектов в Qt.
Поскольку Qt может у себя внутри использовать указатели на данные объекты на момент вызова оператора delete.

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    Ua

    Qt - Тест 001. Сигналы и слоты

    • Результат:84баллов,
    • Очки рейтинга4
    Ua

    Qt - Тест 001. Сигналы и слоты

    • Результат:42баллов,
    • Очки рейтинга-8
    ОК

    Qt - Тест 001. Сигналы и слоты

    • Результат:47баллов,
    • Очки рейтинга-6
    Последние комментарии
    ИМ
    Игорь Максимов22 ноября 2024 г. 21:51
    Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    Evgenii Legotckoi
    Evgenii Legotckoi31 октября 2024 г. 23:37
    Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
    A
    ALO1ZE19 октября 2024 г. 17:19
    Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь Максимов5 октября 2024 г. 16:51
    Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas55 июля 2024 г. 20:02
    QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    Сейчас обсуждают на форуме
    f
    firstlunoxod15 февраля 2025 г. 13:46
    Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
    Дмитрий
    Дмитрий3 февраля 2025 г. 16:24
    Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
    NW
    Nayo Wai30 января 2025 г. 19:22
    не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
    n
    nkly3 января 2025 г. 12:52
    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
    M
    Marsel17 августа 2023 г. 0:26
    OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

    Следите за нами в социальных сетях