Russian Qt Forum
Ноябрь 25, 2024, 11:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: первая программа на OpenGL + Qt  (Прочитано 10149 раз)
Druid
Гость
« : Декабрь 10, 2006, 16:04 »

начал писать первую программу с использованием openGL.
При линковке выдает ошибку
Код:

OGLQuad error LNK2001: unresolved external symbol "public: virtual bool __thiscall OGLQuad::qt_property(int,int,class QVariant *)" (?qt_property@OGLQuad@@UAE_NHHPAVQVariant@@@Z)


Программирую по Windows, VS 2003, QT 3.3.6.
Текст хедер файла к которому оно придерается вот:

Код:

#ifndef _OGLQuad_h_
#define _OGLQuad_h_

#include <qgl.h>

// ======================================================================
class OGLQuad : public QGLWidget {
    Q_OBJECT

protected:
    virtual void initializeGL(                       );
    virtual void resizeGL    (int nWidth, int nHeight);
    virtual void paintGL     (                       );

public:
    OGLQuad(QWidget* pwgt = 0, const char* pszName = 0);
};

#endif  //_OGLQuad_h_


вроде в переменных состояния все прописано, проблем не было до использования openGL.
подскажите чего он просит?
Записан
Dendy
Гость
« Ответ #1 : Декабрь 10, 2006, 17:03 »

moc.exe натравил на заголовочник? moc_oglquad.cpp добавил в проект?
Записан
Druid
Гость
« Ответ #2 : Декабрь 11, 2006, 01:12 »

Цитата: "Dendy"
moc.exe натравил на заголовочник? moc_oglquad.cpp добавил в проект?

да, не помогло (\
проект работает если его собрать из под Visual Studio .NET 2003 Command Prompt, там если набрать команды
qmake OGLQuad.pro
nmake

получается файл .exe, который работает...
Записан
Dendy
Гость
« Ответ #3 : Декабрь 11, 2006, 02:21 »

Посмотри чем различаются файльІ moc_oglquad.cpp (или как там у тебя), сгенереньІе из под Студии и с помощью qmake & nmake. Теоретически должньІ бьІть одинаковьІ.
Записан
Вячеслав
Гость
« Ответ #4 : Декабрь 11, 2006, 09:15 »

А второй версии qt на компе нет случаем ? qtdir и дя студии и для qmake одинаков ?
Записан
Druid
Гость
« Ответ #5 : Декабрь 14, 2006, 02:28 »

Нашел, что каким то образом часть переменных сред куда-то задевалось, прописал назад. Теперь все работает из под командной строки, не из под командной строки Visual Studio, а уже из обычной. Только при этом выдает ряд предупреждений, но исполнимый файл успешно работает...
Предупреждения такие:
Код:

LINK : warning LNK4199: /DELAYLOAD:comdlg32.dll ignored; no imports found from comdlg32.dll
LINK : warning LNK4199: /DELAYLOAD:oleaut32.dll ignored; no imports found from oleaut32.dll
LINK : warning LNK4199: /DELAYLOAD:winmm.dll ignored; no imports found from winmm.dll
LINK : warning LNK4199: /DELAYLOAD:wsock32.dll ignored; no imports found from wsock32.dll
LINK : warning LNK4199: /DELAYLOAD:winspool.dll ignored; no imports found from winspool.dll
LINK : warning LNK4089: all references to 'MSVCP71.dll' discarded by /OPT:REF


Проверил пути до этих файлов в переменных средах есть, чего он ругается пока не пойму...

В Visual Studio не работает, ошибка:
Код:

OGLQuad error LNK2019: unresolved external symbol __imp__glOrtho@48 referenced in function "protected: virtual void __thiscall OGLQuad::resizeGL(int,int)" (?resizeGL@OGLQuad@@MAEXHH@Z)

OGLQuad error LNK2019: unresolved external symbol __imp__glClear@4 referenced in function "protected: virtual void __thiscall OGLQuad::paintGL(void)" (?paintGL@OGLQuad@@MAEXXZ)


и еще 5 таких же...

добавлено спустя 2 минуты:

 
Цитата: "Вячеслав"
А второй версии qt на компе нет случаем ? qtdir и дя студии и для qmake одинаков ?

брал сгенерированный nmake'ом файл и включал в проект, результат тоже...

добавлено спустя 35 секунд:

 
Цитата: "Вячеслав"
А второй версии qt на компе нет случаем ? qtdir и дя студии и для qmake одинаков ?

второй версии нет.
Записан
Dendy
Гость
« Ответ #6 : Декабрь 14, 2006, 03:03 »

В студии забьІл добавить к либам OpenGL32.lib, отсюда и ругань.

Проверь чем отличаются moc_ файл, сгенереньІй из студии и собраньІй с помощью:

Код:
moc oglquad.h -o moc_oglquad.cpp


Что прописано в студии в Custom Build oglquad.h в поле Command? В поле Output?
Какие версии Qt стоят на машине? И сколько?
Записан
Druid
Гость
« Ответ #7 : Декабрь 14, 2006, 10:50 »

Цитата: "Dendy"

Проверь чем отличаются moc_ файл, сгенереньІй из студии и собраньІй с помощью:

Код:
moc oglquad.h -o moc_oglquad.cpp


Идентичны, проверил...

Цитата: "Dendy"
В студии забьІл добавить к либам OpenGL32.lib, отсюда и ругань.

А где оно прописывается?

Цитата: "Dendy"
Какие версии Qt стоят на машине? И сколько?

Одна версия qt 3.3.6, других нет.

Цитата: "Dendy"
Что прописано в студии в Custom Build oglquad.h в поле Command? В поле Output?

Это в свойствах проекта, в OGLQuad property Pages, в Custom Build Step - General ?
в поле Command Line и в поле Output пусто, ничего нет. А что там должно быть?
Записан
Sergeich
Гость
« Ответ #8 : Декабрь 14, 2006, 13:39 »

Попробуй добавить в прошник CONFIG += opengl и из него заново сделай солюшен
Записан
Druid
Гость
« Ответ #9 : Декабрь 14, 2006, 15:06 »

Цитата: "Sergeich"
Попробуй добавить в прошник CONFIG += opengl и из него заново сделай солюшен

То есть из него заново сделать солюшен?
Просто залезть в директорию и потправить прошник, а после этого загрузить это в Visual Studio ?

добавлено спустя 2 минуты:

 заменил его на то что в книжке написано
Код:

TEMPLATE  = app
CONFIG   += qt opengl warn_on release
HEADERS   = OGLQuad.h
SOURCES  = OGLQuad.cpp \
            main.cpp
TARGET    = OGLQuad



и с этим запустил, то же самое...
Записан
Druid
Гость
« Ответ #10 : Декабрь 16, 2006, 01:02 »

Покопался с кодом вроде наткнулся вот на что есть описание класса в OGLQuad.h
Код:

class OGLQuad : public QGLWidget {
    Q_OBJECT

protected:
    virtual void initializeGL(                       );
    virtual void resizeGL    ( int nWidth, int nHeight );
    //virtual void paintGL     (                       );

public:
    OGLQuad(QWidget* pwgt = 0, const char* pszName = 0);
};


И есть к нему OGLQuad.cpp в котором и проиходит ошибка
Код:

void OGLQuad::resizeGL    ( int nWidth, int nHeight )
{
    glMatrixMode(GL_PROJECTION);// вот оно
    ...
    ...
}


Так он ругается при линковке именно на glMatrixMode(GL_PROJECTION);
Я так понимаю это не входит в QT, а это OpenGL-функция. Может ей надо прописать "ЧТО-ТО::" ?
Записан
Dendy
Гость
« Ответ #11 : Декабрь 16, 2006, 01:16 »

Если делаешь Makefile через qmake, то он сам добавляет LIBS += -lOpenGL32
Если из студии, то нужно руками добавить в проект:

Properties -> Linker -> Input -> Additional Dependencies: OpenGL32.lib
Записан
Druid
Гость
« Ответ #12 : Декабрь 16, 2006, 02:49 »

Цитата: "Dendy"
Если делаешь Makefile через qmake, то он сам добавляет LIBS += -lOpenGL32
Если из студии, то нужно руками добавить в проект:

Properties -> Linker -> Input -> Additional Dependencies: OpenGL32.lib


УРА! Огромное спасибо за помощь. Все заработало.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 21.