Problem cross compiling (QT5) Qt3D to raspberry Pi
-
Hi,
I have created working cross compile environment to my linux mint laptop. I was able to deploy
simple helloworld app to my rpi. Now I have tried to get teapot example to work, but no luck.
Teapot qt example is here:
"http://doc-snapshot.qt-project.org/qt3d-1.0/qt3d-teapot.html"There is something wrong with my teapotview constructor, but I don't now what it is..
Does anyone know what is the problem, I have run out of ideas here?Error print:
@In file included from ../qt5-raspberrypi-example/main.cpp:2:0:
../qt5-raspberrypi-example/teapotview.h: In constructor 'TeapotView::TeapotView(QWidget*)':
../qt5-raspberrypi-example/teapotview.h:13:65: error: no matching function for call to 'QGLView::QGLView(QWidget*&)'
../qt5-raspberrypi-example/teapotview.h:13:65: note: candidates are:
In file included from /mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/QGLView:1:0,
from ../qt5-raspberrypi-example/teapotview.h:4,
from ../qt5-raspberrypi-example/main.cpp:2:
/mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/qglview.h:63:14: note: QGLView::QGLView(const QSurfaceFormat&, QWindow*)
/mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/qglview.h:63:14: note: no known conversion for argument 1 from 'QWidget*' to 'const QSurfaceFormat&'
/mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/qglview.h:62:14: note: QGLView::QGLView(QWindow*)
/mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/qglview.h:62:14: note: no known conversion for argument 1 from 'QWidget*' to 'QWindow*'
/mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/qglview.h:58:21: note: QGLView::QGLView(const QGLView&)
/mnt/rasp-pi-rootfs/usr/local/qt5pi/include/Qt3D/qglview.h:58:21: note: no known conversion for argument 1 from 'QWidget*' to 'const QGLView&'
make: *** [main.o] Error 1@Here is my code and pro file:
main.cpp
@
#include <Qt/qapplication.h>
#include "teapotview.h"int main(int argc, char *argv[])
{
QApplication app(argc, argv);
TeapotView view;if (view.stereoType() != QGLView::RedCyanAnaglyph) view.camera()->setEyeSeparation(0.3f); if (QApplication::arguments().contains(QLatin1String("-maximize"))) view.showMaximized(); else if (QApplication::arguments().contains(QLatin1String("-fullscreen"))) view.showFullScreen(); else view.show(); return app.exec();
}@
teapotview.h:
@#ifndef TEAPOTVIEW_H
#define TEAPOTVIEW_H#include <Qt3D/QGLView>
#include <Qt3D/QGLTeapot>class QGLSceneNode;
class TeapotView : public QGLView
{
Q_OBJECT
public:
TeapotView(QWidget *parent = 0) : QGLView(parent), teapot(0) {}
~TeapotView();protected:
void initializeGL(QGLPainter *painter);
void paintGL(QGLPainter *painter);
private:
QGLSceneNode *teapot;
};#endif // TEAPOTVIEW_H@
teapotview.cpp
@#include "teapotview.h"
#include <Qt3D/QGLBuilder>
#include <Qt3D/QGLSceneNode>void TeapotView::initializeGL(QGLPainter *painter)
{
painter->setStandardEffect(QGL::LitMaterial);
QGLBuilder builder;
builder << QGLTeapot();
teapot = builder.finalizedSceneNode();
}TeapotView::~TeapotView()
{
delete teapot;
}void TeapotView::paintGL(QGLPainter *painter)
{
teapot->draw(painter);
}@helloworld.pro
@
TEMPLATE = apptarget.path = /home/pi/teapot
TARGET = teapot
INSTALLS += targetDEPENDPATH += .
INCLUDEPATH += .SOURCES += main.cpp
teapotview.cppHEADERS +=
teapotview.hCONFIG += qt qwidgets warn-on qt3d_deploy_pkg
OTHER_FILES +=
teapot.rc
teapot.desktopRC_FILE = teapot.rc
INCLUDEPATH += /mnt/rasp-pi-rootfs/usr/local/qt5pi/include/
qml_folder.source = qml
DEPLOYMENTFOLDERS = qml_folderfor(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemsources = $${item}.sources
$$itemsources = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath= $$eval($${deploymentfolder}.target)
export($$itemsources)
export($$itempath)
DEPLOYMENT += $$item
}installPrefix = /home/pi/$${TARGET}
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}@ -
"Working teapot link":http://doc-snapshot.qt-project.org/qt3d-1.0/qt3d-teapot.html
-
QGLview is now a subclass of Qwindow not Qwidget.
Just change the constructor argument to:
@TeapotView(QWindow *parent = 0)@And you should be good to go.
The documentation for QT3D is atrocious now'a'days.
But you can checkout updated examples directly from the git repos.
http://qt.gitorious.org/qt/qt3d/trees/master/examples/qt3d/teapot