summaryrefslogtreecommitdiffstats
path: root/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp')
-rw-r--r--tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp b/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp
new file mode 100644
index 0000000000..fa66684294
--- /dev/null
+++ b/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "openglwindow.h"
+
+#include <QApplication>
+#include <QFocusEvent>
+#include <QHBoxLayout>
+#include <QKeyEvent>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QWidget>
+
+
+// Making use of the class from the openglwindow example
+class Window : public OpenGLWindow
+{
+ Q_OBJECT
+public:
+ using OpenGLWindow::OpenGLWindow;
+
+ void render(QPainter *p) override
+ {
+ QLinearGradient g(0, 0, 0, height());
+ g.setColorAt(0, QColor("lightsteelblue"));
+ g.setColorAt(1, Qt::black);
+ p->fillRect(0, 0, width(), height(), g);
+
+ p->setPen(Qt::white);
+
+ p->drawText(20, 30, QLatin1String("This is an OpenGL based QWindow"));
+
+ if (m_key.trimmed().length() > 0) {
+ QRect bounds = p->boundingRect(QRect(0, 0, width(), height()), Qt::AlignTop | Qt::AlignLeft, m_key);
+ p->save();
+ p->translate(width() / 2.0, height() / 2.0);
+ p->scale(10, 10);
+ p->translate(-bounds.width() / 2.0, -bounds.height() / 2.0);
+ p->drawText(bounds, Qt::AlignCenter, m_key);
+ p->restore();
+ }
+
+ if (m_focus)
+ p->drawText(20, height() - 20, QLatin1String("Window has focus!"));
+
+ p->setRenderHint(QPainter::Antialiasing);
+ p->drawPolyline(m_polygon);
+ }
+
+ void mousePressEvent(QMouseEvent *e) override
+ {
+ if (!m_mouseDown) {
+ m_mouseDown = true;
+ m_polygon.clear();
+ m_polygon.append(e->position().toPoint());
+ renderLater();
+ }
+ }
+
+ void mouseMoveEvent(QMouseEvent *e) override
+ {
+ if (m_mouseDown) {
+ m_polygon.append(e->position().toPoint());
+ renderLater();
+ }
+ }
+
+ void mouseReleaseEvent(QMouseEvent *e) override
+ {
+ if (m_mouseDown) {
+ m_mouseDown = false;
+ m_polygon.append(e->position().toPoint());
+ renderLater();
+ }
+ }
+
+ void focusInEvent(QFocusEvent *) override
+ {
+ m_focus = true;
+ renderLater();
+ }
+
+ void focusOutEvent(QFocusEvent *) override
+ {
+ m_focus = false;
+ m_polygon.clear();
+ renderLater();
+ }
+
+ void keyPressEvent(QKeyEvent *e) override
+ {
+ m_key = e->text();
+ renderLater();
+ }
+
+ void keyReleaseEvent(QKeyEvent *) override
+ {
+ m_key = QString();
+ renderLater();
+ }
+private:
+ QPolygon m_polygon;
+ QString m_key;
+ bool m_mouseDown = false;
+ bool m_focus = false;
+};
+
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QWidget *widget = new QWidget;
+ QHBoxLayout *layout = new QHBoxLayout(widget);
+
+ Window *window = new Window;
+
+ QWidget *container = QWidget::createWindowContainer(window);
+ container->setMinimumSize(300, 300);
+ container->setMaximumSize(600, 600);
+ container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ container->setFocusPolicy(Qt::StrongFocus);
+
+ window->setGeometry(100, 100, 300, 200);
+
+ layout->addWidget(new QLineEdit(QLatin1String("A QLineEdit")));
+ layout->addWidget(container);
+ layout->addWidget(new QLineEdit(QLatin1String("A QLabel")));
+
+ widget->show();
+
+ return app.exec();
+}
+
+#include "windowcontainer.moc"