Add a manual test for the window geometry.
Test positioning QWindow and QWidget (frame / normal geometry) for testing QPA plugins. The test can be built with Qt 4 for comparison. Change-Id: I695bf28d5fdf738262d322518d01ad04aa5056f5 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
This commit is contained in:
parent
c1bfcb29ff
commit
93b34badfe
@ -27,6 +27,7 @@ socketengine \
|
|||||||
textrendering \
|
textrendering \
|
||||||
widgets/itemviews/delegate \
|
widgets/itemviews/delegate \
|
||||||
windowflags \
|
windowflags \
|
||||||
|
windowgeometry \
|
||||||
windowmodality
|
windowmodality
|
||||||
|
|
||||||
!contains(QT_CONFIG, openssl):!contains(QT_CONFIG, openssl-linked):SUBDIRS -= qssloptions
|
!contains(QT_CONFIG, openssl):!contains(QT_CONFIG, openssl-linked):SUBDIRS -= qssloptions
|
||||||
|
364
tests/manual/windowgeometry/controllerwidget.cpp
Normal file
364
tests/manual/windowgeometry/controllerwidget.cpp
Normal file
@ -0,0 +1,364 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU Lesser
|
||||||
|
** General Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU General
|
||||||
|
** Public License version 3.0 as published by the Free Software Foundation
|
||||||
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU General
|
||||||
|
** Public License version 3.0 requirements will be met:
|
||||||
|
** http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "controllerwidget.h"
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
# include <QtWidgets>
|
||||||
|
# include <QWindow>
|
||||||
|
# include <QBackingStore>
|
||||||
|
# include <QPaintDevice>
|
||||||
|
# include <QPainter>
|
||||||
|
#else
|
||||||
|
# include <QtGui>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
CoordinateControl::CoordinateControl(const QString &sep) : m_x(new QSpinBox), m_y(new QSpinBox)
|
||||||
|
{
|
||||||
|
m_x->setMinimum(0);
|
||||||
|
m_x->setMaximum(2000);
|
||||||
|
connect(m_x, SIGNAL(valueChanged(int)), this, SLOT(spinBoxChanged()));
|
||||||
|
m_y->setMinimum(0);
|
||||||
|
m_y->setMaximum(2000);
|
||||||
|
connect(m_y, SIGNAL(valueChanged(int)), this, SLOT(spinBoxChanged()));
|
||||||
|
QHBoxLayout *l = new QHBoxLayout(this);
|
||||||
|
l->addWidget(m_x);
|
||||||
|
l->addWidget(new QLabel(sep));
|
||||||
|
l->addWidget(m_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CoordinateControl::setCoordinates(int x, int y)
|
||||||
|
{
|
||||||
|
m_x->blockSignals(true);
|
||||||
|
m_y->blockSignals(true);
|
||||||
|
m_x->setValue(x);
|
||||||
|
m_y->setValue(y);
|
||||||
|
m_x->blockSignals(false);
|
||||||
|
m_y->blockSignals(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPair<int, int> CoordinateControl::coordinates() const
|
||||||
|
{
|
||||||
|
return QPair<int, int>(m_x->value(), m_y->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CoordinateControl::spinBoxChanged()
|
||||||
|
{
|
||||||
|
const int x = m_x->value();
|
||||||
|
const int y = m_y->value();
|
||||||
|
emit pointValueChanged(QPoint(x, y));
|
||||||
|
emit sizeValueChanged(QSize(x, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
RectControl::RectControl()
|
||||||
|
: m_point(new CoordinateControl(QLatin1String("+")))
|
||||||
|
, m_size(new CoordinateControl(QLatin1String("x")))
|
||||||
|
{
|
||||||
|
QHBoxLayout *l = new QHBoxLayout(this);
|
||||||
|
connect(m_point, SIGNAL(pointValueChanged(QPoint)), this, SLOT(handleChanged()));
|
||||||
|
connect(m_point, SIGNAL(pointValueChanged(QPoint)), this, SIGNAL(positionChanged(QPoint)));
|
||||||
|
l->addWidget(m_point);
|
||||||
|
l->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
|
||||||
|
connect(m_size, SIGNAL(sizeValueChanged(QSize)), this, SLOT(handleChanged()));
|
||||||
|
connect(m_size, SIGNAL(sizeValueChanged(QSize)), this, SIGNAL(sizeChanged(QSize)));
|
||||||
|
l->addWidget(m_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RectControl::setRectValue(const QRect &r)
|
||||||
|
{
|
||||||
|
m_point->setPointValue(r.topLeft());
|
||||||
|
m_size->setSizeValue(r.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
QRect RectControl::rectValue() const
|
||||||
|
{
|
||||||
|
return QRect(m_point->pointValue(), m_size->sizeValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
void RectControl::handleChanged()
|
||||||
|
{
|
||||||
|
emit changed(rectValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseWindowControl::BaseWindowControl(QObject *w)
|
||||||
|
: m_geometry(new RectControl)
|
||||||
|
, m_framePosition(new CoordinateControl(QLatin1String("x")))
|
||||||
|
, m_moveEventLabel(new QLabel(tr("Move events")))
|
||||||
|
, m_resizeEventLabel(new QLabel(tr("Resize events")))
|
||||||
|
, m_mouseEventLabel(new QLabel(tr("Mouse events")))
|
||||||
|
, m_object(w)
|
||||||
|
, m_moveCount(0)
|
||||||
|
, m_resizeCount(0)
|
||||||
|
{
|
||||||
|
m_object->installEventFilter(this);
|
||||||
|
QGridLayout *l = new QGridLayout(this);
|
||||||
|
m_geometry->setTitle(tr("Geometry"));
|
||||||
|
l->addWidget(m_geometry, 0, 0, 1, 2);
|
||||||
|
QGroupBox *frameGB = new QGroupBox(tr("Frame"));
|
||||||
|
QVBoxLayout *frameL = new QVBoxLayout(frameGB);
|
||||||
|
frameL->addWidget(m_framePosition);
|
||||||
|
l->addWidget(frameGB, 0, 2);
|
||||||
|
l->addWidget(m_moveEventLabel, 1, 0);
|
||||||
|
l->addWidget(m_resizeEventLabel, 1, 1);
|
||||||
|
l->addWidget(m_mouseEventLabel, 1, 2);
|
||||||
|
|
||||||
|
connect(m_geometry, SIGNAL(positionChanged(QPoint)), this, SLOT(posChanged(QPoint)));
|
||||||
|
connect(m_geometry, SIGNAL(sizeChanged(QSize)), this, SLOT(sizeChanged(QSize)));
|
||||||
|
connect(m_framePosition, SIGNAL(pointValueChanged(QPoint)), this, SLOT(framePosChanged(QPoint)));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BaseWindowControl::eventFilter(QObject *, QEvent *e)
|
||||||
|
{
|
||||||
|
switch (e->type()) {
|
||||||
|
case QEvent::Resize: {
|
||||||
|
const QResizeEvent *re = static_cast<const QResizeEvent *>(e);
|
||||||
|
m_resizeEventLabel->setText(tr("Resize %1x%2 (#%3)")
|
||||||
|
.arg(re->size().width()).arg(re->size().height())
|
||||||
|
.arg(++m_resizeCount));
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case QEvent::Move: {
|
||||||
|
const QMoveEvent *me = static_cast<const QMoveEvent *>(e);
|
||||||
|
m_moveEventLabel->setText(tr("Move %1,%2 (#%3)")
|
||||||
|
.arg(me->pos().x()).arg(me->pos().y())
|
||||||
|
.arg(++m_moveCount));
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case QEvent::MouseMove: {
|
||||||
|
const QMouseEvent *me = static_cast<const QMouseEvent *>(e);
|
||||||
|
const QPoint pos = me->pos();
|
||||||
|
QPoint globalPos = objectMapToGlobal(m_object, pos);
|
||||||
|
m_mouseEventLabel->setText(tr("Mouse: %1,%2 Global: %3,%4 ").
|
||||||
|
arg(pos.x()).arg(pos.y()).arg(globalPos.x()).arg(globalPos.y()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWindowControl::posChanged(const QPoint &p)
|
||||||
|
{
|
||||||
|
QRect geom = objectGeometry(m_object);
|
||||||
|
geom.moveTopLeft(p);
|
||||||
|
setObjectGeometry(m_object, geom);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWindowControl::sizeChanged(const QSize &s)
|
||||||
|
{
|
||||||
|
QRect geom = objectGeometry(m_object);
|
||||||
|
geom.setSize(s);
|
||||||
|
setObjectGeometry(m_object, geom);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWindowControl::framePosChanged(const QPoint &p)
|
||||||
|
{
|
||||||
|
setObjectFramePosition(m_object, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWindowControl::refresh()
|
||||||
|
{
|
||||||
|
m_geometry->setRectValue(objectGeometry(m_object));
|
||||||
|
m_framePosition->setPointValue(objectFramePosition(m_object));
|
||||||
|
}
|
||||||
|
|
||||||
|
// A control for a QWidget
|
||||||
|
class WidgetWindowControl : public BaseWindowControl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit WidgetWindowControl(QWidget *w ) : BaseWindowControl(w)
|
||||||
|
{ setTitle(w->windowTitle()); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual QRect objectGeometry(const QObject *o) const
|
||||||
|
{ return static_cast<const QWidget *>(o)->geometry(); }
|
||||||
|
virtual void setObjectGeometry(QObject *o, const QRect &r) const
|
||||||
|
{ static_cast<QWidget *>(o)->setGeometry(r); }
|
||||||
|
virtual QPoint objectFramePosition(const QObject *o) const
|
||||||
|
{ return static_cast<const QWidget *>(o)->pos(); }
|
||||||
|
virtual void setObjectFramePosition(QObject *o, const QPoint &p) const
|
||||||
|
{ static_cast<QWidget *>(o)->move(p); }
|
||||||
|
virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &p) const
|
||||||
|
{ return static_cast<const QWidget *>(o)->mapToGlobal(p); }
|
||||||
|
};
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
|
||||||
|
// Test window drawing diagonal lines
|
||||||
|
class Window : public QWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit Window(QWindow *parent = 0)
|
||||||
|
: QWindow(parent)
|
||||||
|
, m_backingStore(new QBackingStore(this))
|
||||||
|
{
|
||||||
|
setObjectName(QStringLiteral("window"));
|
||||||
|
setWindowTitle(tr("TestWindow"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void exposeEvent(QExposeEvent *)
|
||||||
|
{ render(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
QBackingStore *m_backingStore;
|
||||||
|
void render();
|
||||||
|
};
|
||||||
|
|
||||||
|
void Window::render()
|
||||||
|
{
|
||||||
|
QRect rect(QPoint(), geometry().size());
|
||||||
|
m_backingStore->resize(rect.size());
|
||||||
|
m_backingStore->beginPaint(rect);
|
||||||
|
if (!rect.size().isEmpty()) {
|
||||||
|
QPaintDevice *device = m_backingStore->paintDevice();
|
||||||
|
QPainter p(device);
|
||||||
|
p.fillRect(rect, Qt::white);
|
||||||
|
p.drawLine(0, 0, rect.width(), rect.height());
|
||||||
|
p.drawLine(0, rect.height(), rect.width(), 0);
|
||||||
|
}
|
||||||
|
m_backingStore->endPaint();
|
||||||
|
m_backingStore->flush(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
// A control for a QWindow
|
||||||
|
class WindowControl : public BaseWindowControl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit WindowControl(QWindow *w ) : BaseWindowControl(w)
|
||||||
|
{ setTitle(w->windowTitle()); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual QRect objectGeometry(const QObject *o) const
|
||||||
|
{ return static_cast<const QWindow *>(o)->geometry(); }
|
||||||
|
virtual void setObjectGeometry(QObject *o, const QRect &r) const
|
||||||
|
{ static_cast<QWindow *>(o)->setGeometry(r); }
|
||||||
|
virtual QPoint objectFramePosition(const QObject *o) const
|
||||||
|
{ return static_cast<const QWindow *>(o)->framePos(); }
|
||||||
|
virtual void setObjectFramePosition(QObject *o, const QPoint &p) const
|
||||||
|
{ static_cast<QWindow *>(o)->setFramePos(p); }
|
||||||
|
virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &p) const
|
||||||
|
{ return static_cast<const QWindow *>(o)->mapToGlobal(p); }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ControllerWidget::ControllerWidget(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
, m_testWidget(new QWidget)
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
, m_testWindow(new Window)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
QMenu *fileMenu = menuBar()->addMenu(tr("File"));
|
||||||
|
QAction *exitAction = fileMenu->addAction(tr("Exit"));
|
||||||
|
exitAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q));
|
||||||
|
connect(exitAction, SIGNAL(triggered()), qApp, SLOT(closeAllWindows()));
|
||||||
|
|
||||||
|
QString title = QLatin1String("Geometry test, (Qt ");
|
||||||
|
title += QLatin1String(QT_VERSION_STR);
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
title += QLatin1String(", ");
|
||||||
|
title += qApp->platformName();
|
||||||
|
#endif
|
||||||
|
title += QLatin1Char(')');
|
||||||
|
setWindowTitle(title);
|
||||||
|
|
||||||
|
int x = 100;
|
||||||
|
int y = 100;
|
||||||
|
const QStringList args = QApplication::arguments();
|
||||||
|
const int offsetArgIndex = args.indexOf(QLatin1String("-offset"));
|
||||||
|
if (offsetArgIndex >=0 && offsetArgIndex < args.size() - 1) {
|
||||||
|
y += args.at(offsetArgIndex + 1).toInt();
|
||||||
|
} else {
|
||||||
|
if (QT_VERSION < 0x050000)
|
||||||
|
y += 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
move(x, y);
|
||||||
|
|
||||||
|
x += 800;
|
||||||
|
m_testWidget->setWindowTitle(tr("TestWidget"));
|
||||||
|
m_testWidget->move(x, y);
|
||||||
|
m_testWidget->resize(200, 200);
|
||||||
|
m_testWidget->show();
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
x += 300;
|
||||||
|
m_testWindow->setFramePos(QPoint(x, y));
|
||||||
|
m_testWindow->resize(200, 200);
|
||||||
|
m_testWindow->show();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QWidget *central = new QWidget ;
|
||||||
|
QVBoxLayout *l = new QVBoxLayout(central);
|
||||||
|
|
||||||
|
const QString labelText = tr(
|
||||||
|
"<html><head/><body><p>This example lets you control the geometry"
|
||||||
|
" of a QWidget and a QWindow (Qt 5) for testing out"
|
||||||
|
" QPA plugins.</p>"
|
||||||
|
"<p>It compiles with Qt 4 and Qt 5 for comparison.</p>"
|
||||||
|
"<p>The command line option <code>-offset <value></code> specifies"
|
||||||
|
" a vertical offset.</p></body></html>");
|
||||||
|
|
||||||
|
l->addWidget(new QLabel(labelText));
|
||||||
|
|
||||||
|
BaseWindowControl *widgetControl = new WidgetWindowControl(m_testWidget.data());
|
||||||
|
widgetControl->refresh();
|
||||||
|
l->addWidget(widgetControl);
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
BaseWindowControl *windowControl = new WindowControl(m_testWindow.data());
|
||||||
|
windowControl->refresh();
|
||||||
|
l->addWidget(windowControl);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
setCentralWidget(central);
|
||||||
|
}
|
||||||
|
|
||||||
|
ControllerWidget::~ControllerWidget()
|
||||||
|
{
|
||||||
|
}
|
156
tests/manual/windowgeometry/controllerwidget.h
Normal file
156
tests/manual/windowgeometry/controllerwidget.h
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU Lesser
|
||||||
|
** General Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU General
|
||||||
|
** Public License version 3.0 as published by the Free Software Foundation
|
||||||
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU General
|
||||||
|
** Public License version 3.0 requirements will be met:
|
||||||
|
** http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONTROLLERWIDGET_H
|
||||||
|
#define CONTROLLERWIDGET_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QSpinBox;
|
||||||
|
class QLabel;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
// A control for editing points or sizes
|
||||||
|
class CoordinateControl : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CoordinateControl(const QString &sep);
|
||||||
|
|
||||||
|
void setPointValue(const QPoint &p) { setCoordinates(p.x(), p.y()); }
|
||||||
|
QPoint pointValue() const { const QPair<int, int> t = coordinates(); return QPoint(t.first, t.second); }
|
||||||
|
|
||||||
|
void setSizeValue(const QSize &s) { setCoordinates(s.width(), s.height()); }
|
||||||
|
QSize sizeValue() const { const QPair<int, int> t = coordinates(); return QSize(t.first, t.second); }
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void pointValueChanged(const QPoint &p);
|
||||||
|
void sizeValueChanged(const QSize &s);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void spinBoxChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setCoordinates(int x, int y);
|
||||||
|
QPair<int, int> coordinates() const;
|
||||||
|
|
||||||
|
QSpinBox *m_x;
|
||||||
|
QSpinBox *m_y;
|
||||||
|
};
|
||||||
|
|
||||||
|
// A control for editing QRect
|
||||||
|
class RectControl : public QGroupBox
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
RectControl();
|
||||||
|
void setRectValue(const QRect &r);
|
||||||
|
QRect rectValue() const;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void changed(const QRect &r);
|
||||||
|
void sizeChanged(const QSize &s);
|
||||||
|
void positionChanged(const QPoint &s);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void handleChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
CoordinateControl *m_point;
|
||||||
|
CoordinateControl *m_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Base class for controlling the position of a Window (QWindow or QWidget)
|
||||||
|
class BaseWindowControl : public QGroupBox
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
protected:
|
||||||
|
explicit BaseWindowControl(QObject *w);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual bool eventFilter(QObject *, QEvent *);
|
||||||
|
void refresh();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void posChanged(const QPoint &);
|
||||||
|
void sizeChanged(const QSize &);
|
||||||
|
void framePosChanged(const QPoint &);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual QRect objectGeometry(const QObject *o) const = 0;
|
||||||
|
virtual void setObjectGeometry(QObject *o, const QRect &) const = 0;
|
||||||
|
|
||||||
|
virtual QPoint objectFramePosition(const QObject *o) const = 0;
|
||||||
|
virtual void setObjectFramePosition(QObject *o, const QPoint &) const = 0;
|
||||||
|
|
||||||
|
virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &) const = 0;
|
||||||
|
|
||||||
|
RectControl *m_geometry;
|
||||||
|
CoordinateControl *m_framePosition;
|
||||||
|
QLabel *m_moveEventLabel;
|
||||||
|
QLabel *m_resizeEventLabel;
|
||||||
|
QLabel *m_mouseEventLabel;
|
||||||
|
|
||||||
|
QObject *m_object;
|
||||||
|
unsigned m_moveCount;
|
||||||
|
unsigned m_resizeCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ControllerWidget : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit ControllerWidget(QWidget *parent = 0);
|
||||||
|
~ControllerWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QScopedPointer<QWidget> m_testWidget;
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
QScopedPointer<QWindow> m_testWindow;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CONTROLLERWIDGET_H
|
51
tests/manual/windowgeometry/main.cpp
Normal file
51
tests/manual/windowgeometry/main.cpp
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU Lesser
|
||||||
|
** General Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU General
|
||||||
|
** Public License version 3.0 as published by the Free Software Foundation
|
||||||
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU General
|
||||||
|
** Public License version 3.0 requirements will be met:
|
||||||
|
** http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include "controllerwidget.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
ControllerWidget controller;
|
||||||
|
controller.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
8
tests/manual/windowgeometry/windowgeometry.pro
Normal file
8
tests/manual/windowgeometry/windowgeometry.pro
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
QT += core gui
|
||||||
|
TARGET = windowgeometry
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
SOURCES += main.cpp controllerwidget.cpp
|
||||||
|
HEADERS += controllerwidget.h
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
Loading…
x
Reference in New Issue
Block a user