Ошибка создания класса

Тема в разделе "LANGS.C", создана пользователем t00x, 23 июн 2007.

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    В общем попробовал Qt + OpenGL, вылетает в ошибку в строке
    QGLWgt *glwidget = new QGLWgt(mainwindow, (QGLWidget*) 0, Qt::Widget); после make.
    Версия Qt 4.2.1.
    main.cpp
    Код (Text):
    1. #include <QApplication>
    2. #include "QMainWnd.h"
    3. #include "QGLWgt.h"
    4.  
    5. int main(int argc, char *argv[]) {
    6.  
    7.     QApplication app(argc, argv);
    8.  
    9.     QMainWnd *mainwindow = new QMainWnd();
    10.     mainwindow->setWindowTitle("OpenGL");
    11.     mainwindow->resize(640, 480);
    12.  
    13.     QStatusBar *statusbar = mainwindow->statusBar();
    14.     statusbar->showMessage(QString::fromLocal8Bit("Р_С_РёР>Р_РРчР_РёРч OpenGL"), 0);
    15.  
    16.     QGLWgt *glwidget = new QGLWgt(mainwindow, (QGLWidget*) 0, Qt::Widget);
    17.  
    18.     mainwindow->setGLWidget(glwidget);
    19.     mainwindow->show();
    20.  
    21.     return app.exec();
    22. }
    QGLWgt.h
    Код (Text):
    1. #include <QtOpenGL>
    2.  
    3. class QGLWgt : public QGLWidget {
    4.  public:
    5.      QGLWgt(QWidget *parent, const QGLWidget *shareWidget, Qt::WindowFlags f);
    6.  protected:
    7.      void initializeGL();
    8.      void resizeGL(int w, int h);
    9.      void paintGL();
    10.  };
    QGlWgt.cpp
    Код (Text):
    1. #include <QGLWgt.h>
    2.  
    3. QGLWgt::QGLWgt(QWidget *parent, const QGLWidget *shareWidget, Qt::WindowFlags f) {
    4. }
    5. void QGLWgt::initializeGL() {
    6. }
    7. void QGLWgt::resizeGL(int w, int h) {
    8.     glViewport(0, 0, (GLint)w, (GLint)h);
    9. }
    10. void QGLWgt::paintGL() {
    11.     glRectf(-0.5,0.5,0.5,-0.5);
    12. }
    QMainWnd.h + *.cpp
    Код (Text):
    1. #include <QMainWindow>
    2. #include <QtOpenGL>
    3.  
    4. class QMainWnd : public QMainWindow {
    5. public:
    6.     void setGLWidget(QGLWidget *widget);
    7. protected:
    8.     virtual void resizeEvent(QResizeEvent *event);
    9. private:
    10.     QGLWidget *glwidget;
    11. };
    12. #include "QMainWnd.h"
    13. void QMainWnd::resizeEvent(QResizeEvent *event){
    14.     if (glwidget != NULL) {
    15.         glwidget->resize(this->width(), this->height() - this->statusBar()->height());
    16.     }
    17. }
    18. void QMainWnd::setGLWidget(QGLWidget *widget){
    19.     glwidget = widget;
    20. }
    Пишет:
    main.o: In function `main':
    main.cpp:dntknw:.text+0x121): undefined reference to `QGLWgt::QGLWgt(QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)'

    Пробовал удалить конструктор, чтобы использовался конструктор класса QGLWidget, похожая ошибка:
    main.cpp: In function в__int main(int, char**)в_T:
    main.cpp:21: error: no matching function for call to в__QGLWgt::QGLWgt(QMainWnd*&, QGLWidget*, Qt::WindowType)в_T
    QGLWgt.h:3: note: candidates are: QGLWgt::QGLWgt()
    QGLWgt.h:3: note: QGLWgt::QGLWgt(const QGLWgt&)


    Посмотрите плз, кому не лень.
     
  2. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Исправил ошибку.
    В файл проекта (.pro) добавлял
    Удалил libjpeg - откомпилировал проект. @#%&Ъ ... Целый день маялся.

    Надо было в WASM.UNIX тему открывать.
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Не доходит.
    Существует класс: QGLWidget.
    У него есть 3 конструктора:
    Создаю потомка класса QGLWidget: class QGLWgt : public QGLWidget.
    Так почему при создании экземпляра класса потомка QGLWgt в основной программе невозможно использовать конструктор
    класса QGLWidget?
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
  5. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    cresta
    Спасибо за помощь.
    Как оказалось, изучать С++ over Qt непросто.