Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] OpenGL i UI

Ostatnio zmodyfikowano 2011-03-16 16:03
Autor Wiadomość
Łukasz123
Temat założony przez niniejszego użytkownika
[Qt] OpenGL i UI
» 2011-03-16 12:19:26
Witam,

mam znów jakiś pewnie głupi problem tylko tym razem z Qt :P
Otóż jak w temacie próbowałem połączyć UI(tj. okno z kontrolkami stworzone w Qt Designe'rze).
O oto co narazie mi wyszło:

MainWindow.h
C/C++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QTextCodec>
#include <QPushButton>
#include "glwidget.h"
namespace Ui
{
    class MainWindow;
}
class MainWindow
    : public QWidget
    , QMainWindow
{
    Q_OBJECT
   
public:
    explicit MainWindow( QWidget * parent = 0 );
    ~MainWindow();
   
private:
    Ui::MainWindow * ui;
    GLWidget * glScene;
   
};



#endif // MAINWINDOW_H
MainWindow.cpp
C/C++
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
MainWindow::MainWindow( QWidget * parent )
    : ui( new Ui::MainWindow )
    , QMainWindow( parent )
{
    ui->setupUi( this );
    glScene = new GLWidget;
   
    QHBoxLayout * mainLayout = new QHBoxLayout;
    mainLayout->addWidget( glScene );
   
    setLayout( mainLayout );
   
}

MainWindow::~MainWindow()
{
    delete ui;
}
main.cpp
C/C++
#include <QtGui/QApplication>
#include "mainwindow.h"
int main( int argc, char * argv[] )
{
    QApplication a( argc, argv );
    MainWindow w;
    w.show();
   
    return a.exec();
}

Błędy:
requestet for member 'show' is ambiguous
candidates are : void QWidget::show
void QWidget::Show

Z góry dzięki !
P-29182
DejaVu
» 2011-03-16 13:10:03
Duże małe litery w nazwach metod - może to ma znaczenie?
P-29185
Łukasz123
Temat założony przez niniejszego użytkownika
» 2011-03-16 13:16:35
Po zamianie show na Show jest undef.A po jego usunięciu to jest znowu to że, jest dwuznaczne w SetupUI.
P-29187
DejaVu
» 2011-03-16 14:04:17
A czy przypadkiem klasy QWidget oraz QMainWindow nie posiadają metod Show? Jeżeli tak to skąd kompilator ma wiedzieć o której wywołanie Ci chodziło?

/edit:
Tu masz analogiczny przypadek:
C/C++
struct D1
{
    void operator delete( void * p ) throw() { }
};

struct D2
{
    void operator delete( void * p ) throw() { }
};

class MD
    : public D1
    , public D2
{
};

int mymain()
{
    MD * p = new MD; /* error - ambiguous operator delete */
    return 0;
}
Przykład ze strony: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20041

Rozwiązaniem tego jest zdefiniowanie metody wewnątrz klasy MD i określenie w niej co powinno zostać wywołane.
P-29188
Łukasz123
Temat założony przez niniejszego użytkownika
» 2011-03-16 14:25:19
O dzięki,to chyba to,teraz nie mam pojęcia jak określić z której klasy metoda ma być wywołana (:
Jak się odwołać do takiej klasy?
P-29189
DejaVu
» 2011-03-16 16:03:41
Napisz w swojej klasie:
C/C++
void TwojaKlasa::Show()
{
    KlasaBazowa1::Show(); //wywołanie z klasy 1
    KlasaBazowa2::Show(); //wywołanie z klasy 2
}
P-29192
« 1 »
  Strona 1 z 1