QtOpenGL und GridLayout
Verfasst: 2. November 2009 13:17
hi
ich bin neu in der qt programmierung meine aber mich schon ein wenig in c++ auszukennen. ich habe jetzt folgende schwierigkeit. mit dem folgendem code stelle ich einen 3D Würfel da. der ganze OpenGL kram tut für das Problem nichts zur sache. ich lasse das glwidget in einem gridlayout anzeigen. nun benötige ich die mauskoordinaten aus dem gridlayout. im moment ist es so, dass ich mir die mauskoords in zwei line edits anzeigen lasse. fahre ich jetzt mit der maus über meine GUI ändert sich auch schön der wert. fahre ich über mein gridlayout mit dem würfel, bleibt das mousetracking stehen und die line edits zeigen nichts mehr an. mein ziel ist es dass ich wenn ich über die GUI fahre keine Koords angezeigt werden, aber sobald ich ins gridlayout komme die koords desselben ausgegeben werden. und zwar skaliert von 0 bis max breite des gridlayouts und von 0 bis max höhe des gridlayouts. das ist auch ein bisschen blöd das ich das nicht so nach maßen ziehen kann sondern das im qt designer nur pi mal daumen ziehen kann. eine skalierung im designer wie bei nem label hab ich jedenfalls noch nicht gefunden.
es wäre total nett wenn ihr ein paar ideen hättet. danke sehr schonmal hier ist der code.
anbei das m_glwidget ist ein objekt der klasse glwidget und ermöglicht mir den zugriff auf die 3d vertices des würfels und den ganzen anderen openGL kram aber das tut hier nichts zur sache. das problem kann man ja auch erzeugen in dem man eine neue qapplication erzeugt. und im designer ein gridlayout in die GUI zieht, sowie zwei line edits und die mousemoveevent funktion einbaut, die dann im line edit ausgegeben wird. danke nochmal
lg
der qtnewbie
Header:
cpp
ich bin neu in der qt programmierung meine aber mich schon ein wenig in c++ auszukennen. ich habe jetzt folgende schwierigkeit. mit dem folgendem code stelle ich einen 3D Würfel da. der ganze OpenGL kram tut für das Problem nichts zur sache. ich lasse das glwidget in einem gridlayout anzeigen. nun benötige ich die mauskoordinaten aus dem gridlayout. im moment ist es so, dass ich mir die mauskoords in zwei line edits anzeigen lasse. fahre ich jetzt mit der maus über meine GUI ändert sich auch schön der wert. fahre ich über mein gridlayout mit dem würfel, bleibt das mousetracking stehen und die line edits zeigen nichts mehr an. mein ziel ist es dass ich wenn ich über die GUI fahre keine Koords angezeigt werden, aber sobald ich ins gridlayout komme die koords desselben ausgegeben werden. und zwar skaliert von 0 bis max breite des gridlayouts und von 0 bis max höhe des gridlayouts. das ist auch ein bisschen blöd das ich das nicht so nach maßen ziehen kann sondern das im qt designer nur pi mal daumen ziehen kann. eine skalierung im designer wie bei nem label hab ich jedenfalls noch nicht gefunden.
es wäre total nett wenn ihr ein paar ideen hättet. danke sehr schonmal hier ist der code.
anbei das m_glwidget ist ein objekt der klasse glwidget und ermöglicht mir den zugriff auf die 3d vertices des würfels und den ganzen anderen openGL kram aber das tut hier nichts zur sache. das problem kann man ja auch erzeugen in dem man eine neue qapplication erzeugt. und im designer ein gridlayout in die GUI zieht, sowie zwei line edits und die mousemoveevent funktion einbaut, die dann im line edit ausgegeben wird. danke nochmal
lg
der qtnewbie
Header:
Code: Alles auswählen
#ifndef CUBE_H
#define CUBE_H
#include <QtGui/QWidget>
#include "glwidget.h"
#include "ui_cube.h"
class GLWidget;
class Cube : public QWidget
{
Q_OBJECT
public:
Cube(QWidget *parent = 0, Qt::WFlags flags = 0);
~Cube();
void mouseMoveEvent(QMouseEvent *event);
int m_iposX;
int m_iposY;
private:
Ui::CubeClass ui;
GLWidget* m_glwidget;
};
#endif // CUBE_H
Code: Alles auswählen
#include "cube.h"
#include <QMouseEvent>
Cube::Cube(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
setMouseTracking(true);
ui.setupUi(this);
m_glwidget = new GLWidget(0, 0);
ui.gridLayout->addWidget(m_glwidget, 0, 0);
m_iposX = 0;
m_iposY = 0;
}
Cube::~Cube()
{
}
void Cube::mouseMoveEvent(QMouseEvent *event)
{
m_iposX = event->x();
m_iposY = event->y();
ui.lineEdit_MouseX->setText(QString::number(m_iposX));
ui.lineEdit_MouseY->setText(QString::number(m_iposY));
}