summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Rødal <sroedal@trolltech.com>2008-06-26 09:49:02 +0200
committerSamuel Rødal <sroedal@trolltech.com>2008-06-26 09:49:02 +0200
commit88ebfcad57721d201af3314f84739205adde3843 (patch)
treead1efed32b2a64191db5a356b956d3344429296c
parentf45c90cd7a9ad1129c8492687e77a819fc72b186 (diff)
Code unification and added instruction window.
-rw-r--r--main.cpp4
-rw-r--r--openglscene.cpp60
-rw-r--r--openglscene.h2
3 files changed, 37 insertions, 29 deletions
diff --git a/main.cpp b/main.cpp
index f9ce1d2..f161b3f 100644
--- a/main.cpp
+++ b/main.cpp
@@ -10,7 +10,7 @@ class GraphicsView : public QGraphicsView
public:
GraphicsView()
{
- setWindowTitle(tr("OpenGL Scene"));
+ setWindowTitle(tr("3D Model Viewer"));
}
protected:
@@ -27,8 +27,6 @@ int main(int argc, char **argv)
GraphicsView view;
view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
- view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
view.setScene(new OpenGLScene);
view.show();
diff --git a/openglscene.cpp b/openglscene.cpp
index 46fa21d..8d6791d 100644
--- a/openglscene.cpp
+++ b/openglscene.cpp
@@ -8,6 +8,17 @@
#define GL_MULTISAMPLE 0x809D
#endif
+QDialog *OpenGLScene::createDialog(const QString &windowTitle) const
+{
+ QDialog *dialog = new QDialog(0, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
+
+ dialog->setWindowOpacity(0.8);
+ dialog->setWindowTitle(windowTitle);
+ dialog->setLayout(new QVBoxLayout);
+
+ return dialog;
+}
+
OpenGLScene::OpenGLScene()
: m_wireframeEnabled(false)
, m_normalsEnabled(false)
@@ -20,10 +31,9 @@ OpenGLScene::OpenGLScene()
, m_angularMomentum(0, 40, 0)
, m_dir(QLatin1String("models"), QLatin1String("*.obj"), QDir::Size | QDir::Reversed, QDir::Files)
{
- QWidget *controls = new QDialog(0, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
- QVBoxLayout *controlsLayout = new QVBoxLayout(controls);
+ QWidget *controls = createDialog(tr("Controls"));
- controlsLayout->addWidget(new QLabel(tr("Model:")));
+ controls->layout()->addWidget(new QLabel(tr("Model:")));
m_models = new QComboBox;
connect(m_models, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(loadModel(const QString &)));
@@ -31,59 +41,57 @@ OpenGLScene::OpenGLScene()
connect(&m_modelLoader, SIGNAL(finished()), this, SLOT(modelLoaded()));
#endif
m_models->addItems(m_dir.entryList());
- controlsLayout->addWidget(m_models);
+ controls->layout()->addWidget(m_models);
QCheckBox *wireframe = new QCheckBox(tr("Render as wireframe"));
connect(wireframe, SIGNAL(toggled(bool)), this, SLOT(enableWireframe(bool)));
- controlsLayout->addWidget(wireframe);
+ controls->layout()->addWidget(wireframe);
QCheckBox *normals = new QCheckBox(tr("Display normals vectors"));
connect(normals, SIGNAL(toggled(bool)), this, SLOT(enableNormals(bool)));
- controlsLayout->addWidget(normals);
+ controls->layout()->addWidget(normals);
- controlsLayout->addWidget(new QLabel(tr("Light position:")));
+ controls->layout()->addWidget(new QLabel(tr("Light position:")));
QSlider *lightPosition = new QSlider(Qt::Horizontal);
lightPosition->setRange(-100, 100);
connect(lightPosition, SIGNAL(valueChanged(int)), this, SLOT(setLightPosition(int)));
- controlsLayout->addWidget(lightPosition);
+ controls->layout()->addWidget(lightPosition);
QPushButton *colorButton = new QPushButton(tr("Choose model color"));
connect(colorButton, SIGNAL(pressed()), this, SLOT(setModelColor()));
- controlsLayout->addWidget(colorButton);
+ controls->layout()->addWidget(colorButton);
QPushButton *backgroundButton = new QPushButton(tr("Choose background color"));
connect(backgroundButton, SIGNAL(pressed()), this, SLOT(setBackgroundColor()));
- controlsLayout->addWidget(backgroundButton);
+ controls->layout()->addWidget(backgroundButton);
- controls->setWindowOpacity(0.8);
- controls->setWindowTitle(tr("Controls"));
-
- QGraphicsItem *controlsItem = addWidget(controls);
- const QRectF rect = controlsItem->boundingRect();
- controlsItem->translate(10 - rect.x(), 10 - rect.y());
-
- QWidget *statistics = new QDialog(0, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
- QVBoxLayout *statisticsLayout = new QVBoxLayout(statistics);
- statisticsLayout->setMargin(20);
+ QWidget *statistics = createDialog(tr("Model info"));
+ statistics->layout()->setMargin(20);
for (int i = 0; i < 3; ++i) {
m_labels[i] = new QLabel;
- statisticsLayout->addWidget(m_labels[i]);
+ statistics->layout()->addWidget(m_labels[i]);
}
- statistics->setWindowOpacity(0.8);
- statistics->setWindowTitle(tr("Model info"));
+ QWidget *instructions = createDialog(tr("Instructions"));
+ instructions->layout()->addWidget(new QLabel(tr("Use mouse wheel to zoom model, and click and drag to rotate model")));
- QGraphicsItem *statisticsItem = addWidget(statistics);
- statisticsItem->translate(10 - rect.x(), 20 + rect.height() - rect.y());
+ addWidget(instructions);
+ addWidget(controls);
+ addWidget(statistics);
+ QPointF pos(10, 10);
foreach (QGraphicsItem *item, items()) {
item->setFlag(QGraphicsItem::ItemIsMovable);
item->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+
+ const QRectF rect = item->boundingRect();
+ item->translate(pos.x() - rect.x(), pos.y() - rect.y());
+
+ pos += QPointF(0, 10 + rect.height());
}
setModel(new Model);
-
m_time.start();
}
diff --git a/openglscene.h b/openglscene.h
index 6e041e1..2602b95 100644
--- a/openglscene.h
+++ b/openglscene.h
@@ -43,6 +43,8 @@ protected:
void wheelEvent(QGraphicsSceneWheelEvent * wheelEvent);
private:
+ QDialog *createDialog(const QString &windowTitle) const;
+
void setModel(Model *model);
bool m_wireframeEnabled;