Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Рисование в OpenGL без paintGL()
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
LLITAKET
Доброго времени суток!

Возникла такая проблема: есть некоторая функция

void GLWidget3DMod::drawLine()
{
    glLineWidth(3.0f);
    glColor4f(1.00f, 0.00f, 0.00f, 1.0f);
    glBegin(GL_LINES);
       glVertex3f( 0.0f,  0.0f,  0.0f);
       glVertex3f( 1.0f,  0.0f,  0.0f);
    glEnd();
}


требуется при нажатии на Push Button вызвать данную функцию и нарисовать линию. делаю следующим образом:
void MainWindow::on_pushButton_clicked()
{    
    ui->widget3DMod->drawLine();

    ui->widget3DMod->updateGL();
}


Однако ничего не происходит. как с этим бороться?
RazrFalcon
drawLine() нужно вызывать в paintGL()
LLITAKET
Цитата(RazrFalcon @ 21.2.2013, 1:38) *
drawLine() нужно вызывать в paintGL()


если вызывать в paintGL(), то не отрисовать по нажатию на кнопку. а нужно именно через нажатие не кнопку
Iron Bug
стандартно такие вещи делаются через события. потому что отрисовка всегда внутри специальных функций происходит.
lanz
Цитата
если вызывать в paintGL(), то не отрисовать по нажатию на кнопку. а нужно именно через нажатие не кнопку


ui->widget3DMod->updateGL();

Вызывает paintGL. Нужно просто в обработчике нажатия устанавливать/сбрасывать флаг.
Например:
void MainWindow::on_pushButton_clicked()
{    
    this->show_line = true;

    ui->widget3DMod->updateGL();
}


А в paintGL уже проверять.
if (this->show_line)
    drawLine ();
LLITAKET
Цитата(lanz @ 21.2.2013, 8:36) *
ui->widget3DMod->updateGL();

Вызывает paintGL. Нужно просто в обработчике нажатия устанавливать/сбрасывать флаг.


то есть создать дополнительный параметр show_line типа bool?
RazrFalcon
Да. Это же opengl. Он довольно часто перерисовывается и сам. При ресайзе и тд.
Обычно флагом такое и решают.

На opengl нельзя нарисовать 1-н раз и все. Нужно рисовать при каждом paintGl.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.