crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

__ilya__
  опции профиля:
сообщение 2.4.2012, 12:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ни как не врублюсь в сигналы и слоты. По этой причине OpenGL в месте с SDL использую, а мне хотелось с Qt

простой пример
float xt = 0, yt = 0, zt = 0;
int main( int argc, char** argv )
{
// тут иницилизация окна, опен жл и тому подобное
while(1)
{
//
//нажатие клавиш
 if (keys[SDLK_LEFT])
                yr += 1.0f;
            if (keys[SDLK_RIGHT])
                yr -= 1.0f;
            if (keys[SDLK_UP])
                zt += 1.0;
            if (keys[SDLK_DOWN])
                zt -= 1.0f;
}

//
//
glTranslatef(xt, yt, zt);//транслируем
// тут рисуется, например триугольник
}


во куски кода на SDL. я нажимаю на стрелки и объект транслируется. А как на Qt сделать?
В летиратуре про сигналы и слоты, слишком мало сказано, я считаю. Может этот пример внесет дополнительную ястность.



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
sidsukana
  опции профиля:
сообщение 2.4.2012, 13:49
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Если нужно по нажатию клавишь сделать действие, то сигналы и слоты тут не причем. У всех виджетов есть набор виртуальных методов-ивентов с помощью которых можно сделать большинство обновляемых событий.
В твоем случае это

virtual void keyPressEvent ( QKeyEvent * event )


Однако для этого нужно наследоваться с QWidget, а точней с QGLWidget (я смотрю ты ogl отдельно юзаешь, хотя в Qt он встроеный)

Допустим у меня вращение объекта в графическом виджете вот так реализовано.

// цепляем по нажатию кнопки мыши
void GLWidget::mousePressEvent(QMouseEvent *event)
{
    lastPos = event->pos();
}

// вращаем
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
    int dx = event->x() - lastPos.x();
    int dy = event->y() - lastPos.y();

    if (event->buttons() & Qt::LeftButton)
    {
        setXRotation(xRot + 8 * dy);
        setYRotation(yRot + 8 * dx);
    }
    else if (event->buttons() & Qt::RightButton)
    {
        setXRotation(xRot + 8 * dy);
        setZRotation(zRot + 8 * dx);
    }
    lastPos = event->pos();
}

// приближаем и отдаляем колесиком
void GLWidget::wheelEvent(QWheelEvent *event)
 {
     int numDegrees = event->delta() / 8;

     numDegrees > 0 ? zoom += 0.5 : zoom -= 0.5;

     updateGL();
     event->accept();
 }


Сообщение отредактировал sidsukana - 2.4.2012, 13:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.5.2025, 10:02