diff options
| author | Samuel Rødal <sroedal@trolltech.com> | 2008-06-26 09:49:02 +0200 |
|---|---|---|
| committer | Samuel Rødal <sroedal@trolltech.com> | 2008-06-26 09:49:02 +0200 |
| commit | 88ebfcad57721d201af3314f84739205adde3843 (patch) | |
| tree | ad1efed32b2a64191db5a356b956d3344429296c | |
| parent | f45c90cd7a9ad1129c8492687e77a819fc72b186 (diff) | |
Code unification and added instruction window.
| -rw-r--r-- | main.cpp | 4 | ||||
| -rw-r--r-- | openglscene.cpp | 60 | ||||
| -rw-r--r-- | openglscene.h | 2 |
3 files changed, 37 insertions, 29 deletions
@@ -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; |
