QWidget: Must construct a QApplication before a QPaintDevice
-
was mache ich falsch?
benutze VS08 pro
und QT 4.4.3der Compiler bringt mir diesen Fehler
QWidget: Must construct a QApplication before a QPaintDevicewenn ich OpenGl ausschalte
neu kompiliere geht nur die GUI auf.Gruß Matthias
-
Code wäre nicht schlecht. Wie in abertausenden Tutorials nachzulesen sieht eine einfache Qt Anwendung so aus:
#include <QApplication> int main(int argc, char* argv[]) { QApplication app(argc, argv); /* erst jetzt fenster erstellen */ QWidget* w = new QWidget; w->show(); return app.exec(); }
-
#include <qtgui\QApplication> #include "window.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
window ist ein GUI Fenster mit OGL
-
das ist das Beispiel von QT 4.4.3
#ifndef WINDOW_H #define WINDOW_H #include <qtgui\QWidget> QT_BEGIN_NAMESPACE class QSlider; QT_END_NAMESPACE //! [0] class GLWidget; class Window : public QWidget { Q_OBJECT public: Window(); private: QSlider *createSlider(); GLWidget *glWidget; QSlider *xSlider; QSlider *ySlider; QSlider *zSlider; }; //! [0] #endif
#include <QtGui\qtgui> #include "glwidget.h" #include "window.h" //! [0] Window::Window() { glWidget = new GLWidget; xSlider = createSlider(); ySlider = createSlider(); zSlider = createSlider(); connect(xSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setXRotation(int))); connect(glWidget, SIGNAL(xRotationChanged(int)), xSlider, SLOT(setValue(int))); connect(ySlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setYRotation(int))); connect(glWidget, SIGNAL(yRotationChanged(int)), ySlider, SLOT(setValue(int))); connect(zSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setZRotation(int))); connect(glWidget, SIGNAL(zRotationChanged(int)), zSlider, SLOT(setValue(int))); //! [0] //! [1] QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(glWidget); mainLayout->addWidget(xSlider); mainLayout->addWidget(ySlider); mainLayout->addWidget(zSlider); setLayout(mainLayout); xSlider->setValue(15 * 16); ySlider->setValue(345 * 16); zSlider->setValue(0 * 16); setWindowTitle(tr("Hello GL")); } //! [1] //! [2] QSlider *Window::createSlider() { QSlider *slider = new QSlider(Qt::Vertical); slider->setRange(0, 360 * 16); slider->setSingleStep(16); slider->setPageStep(15 * 16); slider->setTickInterval(15 * 16); slider->setTickPosition(QSlider::TicksRight); return slider; } //! [2]
-
Qt denkt es handle sich bei Deinem Projekt um eine Konsolenanwendung.
Versuch' mal:QApplication app(argc, argv, QApplication::GuiClient);
-
hab nun alle opengl Beispiele von der QT 4.4.3 ausprobiert
bei jedem kommt die Meldung
bei
QApplication app(argc, argv, QApplication::GuiClient);
öffnet sich auch ein Dos Fenster und der Meldung ???Gruß Matthias
-
Die Fehlermeldung passiert innerhalb von Qt an dieser Stelle:
void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) { if (qApp->type() == QApplication::Tty) qFatal("QWidget: Cannot create a QWidget when no GUI is being used");
vgl: QApplication::Type
Da Du den Applikationstyp nun explizit angegeben hast, ist Deine Qt vermutlich falsch uebersetzt worden.
(Benutzt Du die Open-Source oder die kommerzielle Version?)
-
also ich habe die opensource und mit dem VS Studio 2008 kompiliert
in der Kommandozeileist ganz normal durchgelaufen
eine GUI geht auch
nur keine GUI + opengl
gruß Matthias
-
Woher soll Qt 3.11 wissen, wo die Mainloop (WNDPROC) liegt? Es fehlt also die Verbindung zwischen Deiner (app)lication und Deinem Widget.
Versuch mal, die Anweisung
app.setMainWidget(&MyMainWidget);
in Deinen Code einzufügen.
Vom Laptop abgeschrieben, schreibfaul und deshalb ohne Gewähr:
//----------------------------
#include "Something.h" //!< defines something like something
int main(int argc...
{
QApplication(argc,...);(class) CSomething Something(0,"MyName",true,Qt::WStyleCustomize|aFlag|moreFlags);
app.setMainWidget(&Something);
app.exec();
return 0;
}
"(class) CSomething" bedeutet sowas wie xyz_Dialog.
Ansonsten hilft ja die Dokuseite von Trolltech (Nokia) weiter.
Gruß
Larsα
-
naja... hab doch geschrieben dass ich die QT Version 4.4.3 habe
da gibt es sowas wie app.setMainWidget nicht mehrfunktioniert noch ned hat das schon mal jemand geschafft?
Gruß Matthias
-
hat das schon mal jemand geschafft?
Ja.
Hier gibt's eine Schritt-fuer-Schritt-Anleitung.
-
ja klar kenn ich nach dem hab ichs auch gemacht
hab es gestern nacht erneut gemacht geht wieder ned ...gruß matze
-
in main:
Something w;
w.show();in Something.cpp
Something::Something()
{
ui.setupUi(this);
...
}Gruß
-
Hi an alle,
einfach die Zeilen
QT_BEGIN_NAMESPACE
und
QT_END_NAMESPACE
auskommentieren (in allem Header-Files).
Greetz
-
hab das auch gemacht im compilierten QT alle
QT_BEGIN_NAMESPACE und QT_END_NAMESPACE
gelöscht bringt immer noch nichts
oder muss ich das gesamte qt neu kompilieren???
Gruß Matthias
-
Zunaechst muss ich darauf hinweisen dass ich normalerweise die kommerzielle Version von Qt4 und Visual Studio 2005 benutze.
Ich habe also die Open-Source-Edition von Qt 4.4.3 geladen und im Visual Studio Command Prompt per configure & nmake kompiliert.
Daraufhin habe ich das OpenGL-Beispiel im Verzeichnis examples\opengl\hellogl (war schon kompiliert, darum vorher mit "nmake clean" aufgeraeumt) ebenfalls im Command-Prompt (um die Visual-Studio-Integration der kommerziellen Version zu umgehen) kompiliert:
- qmake (erzeugt Makefile aus der beiliegendem .pro-Datei)
- nmake
Das Beispiel laeuft fehlerfrei.Erzaehlt Dir denn "configure" sowas in der Art?
QMAKESPEC...................win32-msvc2005 (detected)
Architecture................windows
Maketool....................nmake
Debug symbols...............yes
Accessibility support.......yes
STL support.................yes
Exception support...........yes
RTTI support................yes
MMX support.................yes
3DNOW support...............yes
SSE support.................yes
SSE2 support................yes
IWMMXT support..............no
OpenGL support..............yes
Direct3D support............no
OpenSSL support.............no
QtDBus support..............no
QtXmlPatterns support.......yes
Phonon support..............no
WebKit support..............yes
Qt3 compatibility...........yes
-
Hallo,
nun funktioniert es
ich habe alle
QT_BEGIN_NAMESPACE
und
QT_END_NAMESPACE
gelöscht und neu kompiliert nun klappt es
vielen vielen Dank! für den nützlichen BeitragGruß Matthias A
-
Hi,
ich greife diesen alten Thread mal auf weil ich das eingangs angesprochene Problem auch habe - Ich frage mich nur was das auskommentieren des Qt namespace bringt, kann das jemand erklären?
Gruß,
-
in keinen der QT-Beispiele wird besagtes Makro verwendet... das findet sich nur in den QT-eigenen Dateien (wo man nichts rumbasteln sollte, wenn man nicht weiß, was man tut).
Wie kommt ihr also drauf, dass bei euch zu verwenden?
Auch das Beispiel des OP steht so weder im assistant, noch im Quellcode...
-
Genau darum frage ich.